Les premiers de Mersenne sont les nombres premiers de la forme \(2^p-1\).
Pour tester les factorisations, on va considérer les nombres de Mersenne \(M_p=2^p-1\) qui ne sont pas premiers.
Écrire une fonction pollard_rho(n,a,x0)
implantant la méthode rho de
Pollard. Le paramètre a
permet de choisir l’itération \(x^2+a\), et x0
détermine l’initialisation.
Tester la fonction en factorisant les entiers de Mersenne.
Faire afficher le rapport \(i/\sqrt{p}\) où \(i\) est le nombre d’itérations effectuées pour trouver le facteur \(p\). Vérifier que l’itération satisfait au paradoxe des anniversaires.
Changer également de polynôme d’itération : examiner le comportement pour un polynôme linéaire, quadratique, cubique.
Modifier pollard_rho
en ajoutant un paramètre loops
qui permet de
diminuer le nombre de calculs de pgcd en accumulant le produit des u-v
pour effectuer le pgcd toutes les loops
itérations.
Examiner le gain obtenu sur la factorisation des nombres de Mersenne.
On rappelle la méthode : on se donne une borne \(B\), et pour chaque premier \(p_i< B\) on calcule un exposant \(b_i\) tel que \(p_i^{b_i}<n<p_i^{b_i+1}\). On pose \(M\) le produit des \(p_i^{b_i}\). On sait alors que si \(p\) est un diviseur de \(n\) tel que \(p-1\) est \(B\) friable, \(p\) divise \(pgcd(a^M-1,n)\) pour tout \(a\) premier à \(n\).
On considère l’entier \(n=10001\) et la base de premiers \((p_1,\dots p_6) = (-1,2,3,5,7,11)\).
friable(a)
qui renvoie 1 si a est 11-friable, 0
sinon.