previous up next contents index
Previous: 2.6 Générateurs géométriques Up: 2. Générateurs non uniformes Next: 3. Exemples de simulations   Contents   Index

Subsections

2.7 Générateurs arithmétiques

2.7.1 Générateur uniforme de nombres factorisés

Terminons ce chapitre consacré à l'examen de générateurs variés par l'examen du problème suivant : nous nous proposons de construire, pour un maths donné, un générateur uniforme d'entiers factorisés appartenant à l'intervalle maths. Pour de petites valeurs de maths, il suffit d'utiliser un algorithme semblable à l'algorithme 11 pour engendrer les nombres en question, puis d'en chercher la décomposition en un produit de facteurs premiers en utilisant, par exemple, la routine Maple maths.

Mais une telle méthode devient rapidement impratiquable lorsque la taille de maths augmente. En effet, les meilleurs algorithmes de factorisation ont une complexité en maths, conduisant à une explosion du temps de calcul comme le montre le tableau :

maths

Il est donc souhaitable de selectionner les nombres voulus au moyen d'un processus qui donne en même temps leur factorisation. L'algorithme 37 (Bach, 1988) résoud la question de la façon suivante. On commence par sélectionner un facteur maths dans l'intervalle maths, selon une certaine loi, implémentée dans l'algorithme 40 (maths). Puis on sélectionne uniformément maths en utilisant récursivement l'algorithme et enfin on accepte ou on rejette le nombre obtenu maths selon un certain processus, de façon à ce que la loi de probabilité des nombres sélectionnés soit effectivement la loi uniforme.


maths

Le coeur de l'algorithme est donc le processus de sélection des facteurs maths qui interviennent dans la décomposition des maths engendrés. Ce processus sera décrit au § 2.5.1. Mais avant il convient de rappeler quel est le fonctionnement des algorithmes permettant de déterminer rapidement, c'est à dire en un temps logarithmique, si un nombre est premier ou est une puissance d'un nombre premier (et cela indépendamment du fait que la factorisation reste un problème difficile pour les nombres qui ne sont pas de cette forme).

2.7.2 Premiers et puissances de premiers

Les différents algorithmes concernant la factorisabilité d'un nombre peuvent se ranger en deux catégories : les tests de composition et les tests de primalité. Un test de composition a pour objectif de détecter presque toujours si un nombre est composé, en fournissant alors une preuve de l'existence d'une décomposition (sans nécessairement en fournir une de façon explicite). Lorsqu'un tel test échoue, on a donc une forte probabilité pour que le nombre soit premier. Par contre, un test de primalité a comme objectif de déterminer avec certitude si un nombre est premier ou non : il s'agit donc d'obtenir une preuve de l'impossibilité d'une décomposition, et non pas une simple présomption.

L'intérêt des tests de composition vient de ce qu'ils sont nettement plus rapides que les tests de primalité. On dispose donc de deux stratégies : ou bien se contenter des tests de composition (en réglant le seuil de probabilité selon la marge d'erreur tolérable), ou bien utiliser systématiquement un test de primalité lorsque le test de composition a fait apparaître une forte présomption d'une telle primalité.

Pour illustrer ce qui vient d'être dit, considérons la liste maths des nombres premiers maths. Un nombre maths qui n'est pas dans cette liste et qui est divisible par un nombre de la liste est un nombre composé. Un pareil test ne nécessite pas maths divisions, mais seulement le calcul du pgcd de maths et du produit maths des membres de la liste, ce qui est plus rapide.

Pour les nombres maths, ce test est en fait un test de primalité, car maths est premier s'il n'a pas de diviseur premier maths. Pour les autres nombres, ce test est un test de composition, donnant maths de réponses positives. Il constitue les lignes 2 à 10 de l'algorithme 38.


maths

Pour les maths de nombres restants, on utilise un algorithme dont le principe est le suivant : pour tout maths, on a (théorème de Fermat) la relation maths. On génère donc plusieurs maths dans cet intervalle et l'on rejette maths comme non-premier si l'un des maths est différent de maths. Il va de soi que les puissances modulo maths doivent être calculées par un algorithme spécial, et non pas par le calcul effectif de maths, suivi d'une division !

On peut malheureusement trouver des nombres composés qui ne sont pas détectés par ce test (nombres de Carmichel). Il convient donc de renforcer ce test de la façon suivante : on écrit maths avec maths et maths impair. L'un des nombres maths, maths, ..., maths doit valoir maths, et si ce n'est pas vrai dès le début, la première apparition du maths doit être immédiatement précédée par la valeur maths : tel est le test de Rabin-Miller (algorithme 38). En voici deux exemples :

maths

maths

On peut montrer que, pour maths composé, la proportion de maths qui n'entrainent pas le rejet de maths est faible (et cela d'autant plus que les petits nombres ont été éliminés par le crible d'Eratosthène) : de petites valeurs du facteur de répétition (maths) permettent d'assurer une probabilité tout à fait satisfaisante.

Voyons maintenant comment détecter si un nombre maths est ou non une puissance d'un nombre premier (algorithme 39). On commence (lignes 2 à 8) par un crible fondé sur une tabulation préalable des maths, pour maths inférieur au plus grand maths envisagé et maths. S'il s'avère que maths faisait partie des maths de nombres qui passent à travers le crible, choisissons un nombre maths. Si maths avec maths premier, on a maths, et par théorème de Fermat, maths divise maths. On calcule donc le pgcd maths de maths et de maths (appelé maths en Maple, pour le distinguer du pgcd des polynômes). Si maths, il est clair que maths n'est pas de la forme cherchée (l. 13). Si maths est premier, il reste à vérifier que maths est bien une puissance de maths (l. 32 à 39).

Dans le cas où maths est un nombre composé, on recommence les tests précédents avec une nouvelle valeur de maths, et surtout en partant de maths, plutôt que du nombre maths originel. Dans le cas le plus fréquent, on assiste à une réduction rapide du nombre maths. Il reste à traiter le cas où maths est ou devient un nombre de Carmichel, et donc ne diminue plus lorsque l'on répète l'algorithme. La procédure utilisée l. 20 à 31 requiert des calculs de fonctions transcendantes, mais cela ne dégrade pas notablement les performances de l'algorithme, car il s'agit d'un cas peu fréquent.


maths


2.7.3 L'algorithme de Bach

Revenons maintenant à l'algorithme de Bach. Commençons par remarquer que, pour des entiers maths avec maths, le nombre d'entiers contenus dans l'intervalle allant de maths (exclus) à maths (inclus) est exactement maths. Supposons que nous sachions sélectionner maths dans l'intervalle maths selon la loi maths. Rappelons que nous utilisons le signe maths (propto) et non le signe maths pour indiquer que les quantités données sont non pas égales, mais proportionnelles aux probabilités effectives (normaliser en divisant par la masse totale de la distribution ne sert pas à grand chose, à part compliquer les écritures).

Nous avons donc maths puisque le facteur maths sera (récurrence) choisi uniformément dans l'intervalle maths. On a donc maths maths et de là maths. Telle est donc la loi de probabilité des nombres maths obtenus à la ligne 6 de l'algorithme 37. Pour se ramener à la loi uniforme, il faut donc utiliser une méthode de tir : le nombre obtenu sera rejeté si le verdict fourni par une variable aléatoire uniforme est supérieur à maths. On remarquera que le taux de rejet est tres faible puisqu'il est visiblement inférieur à maths.

Il reste à examiner comment sélectionner les maths avec la bonne probabilité. En remarquant que maths est inférieur à maths, nous pouvons utiliser le processus de sélection suivant. Commençons par choisir uniformément un entier maths dans l'intervalle maths avec maths défini par maths. Posons alors maths, choisissons uniformément un entier maths dans maths et recommençons jusqu'à obtenir un maths inférieur ou égale à maths qui soit bien de la forme maths (ce que permet précisément de faire l'algorithme 39). La probabilité de sélection d'une valeur particulière de maths reste proportionnelle à maths.

Nous passons alors ces nombres à travers un processus de sélection : une valeur de maths sera rejetée si le verdict fourni par une variable aléatoire uniforme est supérieur au ratio des chances, c'est à dire ici à maths. On obtient l'algorithme 40.


maths

Il reste à examiner la praticabilité de cet algorithme, c'est à dire la valeur moyenne du nombre maths d'essais qui seront nécessaires avant que maths puisse fournir une valeur de maths. La figure 2.14 illustre ce problème pour maths (valeur permettant d'avoir une figure lisible, mais ridiculement faible eu égard au domaine d'utilisation de l'algorithme). En gris, nous avons les chances de sélection d'un nombre maths sur le seul critère qu'il soit inférieur à maths, tandis qu'en noir nous avons les chances pour qu'un nombre maths soit choisi comme valeur de maths. Le rapport des deux surfaces est égal au facteur de tir c'est à dire à l'espérance du nombre d'essais nécessaires pour obtenir un succès.

Figure 2.14: Rapport des chances lors de la s'election d'un maths.
maths

On a d'une part maths et d'autre part :

maths maths maths  
  maths maths  

puisque la première somme maths et que la deuxième est de limite 1. On voit donc que maths, c'est à dire le nombre moyen d'essais nécessaire pour un succès, est majoré par une quantité équivalente à maths.

Un examen attentif du calcul précédent montre que cette quantité est en fait une bonne approximation de l'espérance du nombre d'essais. En effet, les nombres qui sont des puissances de premiers (avec maths) sont rares en comparaison des nombres premiers eux mêmes. A titre d'exemple, nous avons explicitement calculé maths pour maths, et obtenu maths soit maths. A titre de comparaison, on a : maths.

Ces valeurs peuvent être retrouvées expérimentalement. La figure 2.15 rend compte de la répartition du nombre d'essais maths qui ont été nécessaires pour obtenir une suite de maths instanciations de maths. On constate que la courbe expérimentale correspond bien à une loi géométrique, et l'on trouve maths et maths., tandis que le test du maths donne un score de maths.

Figure 2.15: Répartition du nombre déssais avant succès.
maths


previous up next contents index
Previous: 2.6 Générateurs géométriques Up: 2. Générateurs non uniformes Next: 3. Exemples de simulations   Contents   Index


douillet@ensait.fr
2005-01-04