Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
factorisation_shor [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


factorisation_shor

Warning: Undefined array key -1 in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/html.php on line 1458

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
factorisation_shor [2009/01/06 07:45]
tyrtamos
factorisation_shor [2009/01/06 08:20]
tyrtamos
Ligne 168: Ligne 168:
 </code> </code>
  
-La fonction a échoué sur une première valeur de a = 5811, puis sur a = 3859 et a réussi avec a = 30757 au bout de 2/100 ème de seconde.+La fonction a échoué sur une première valeur de a = 5811, puis sur a = 3859 et a réussi avec a = 30757 (au bout de 2/100 ème de seconde).
  
-Cette dernière valeur de a a permis de trouver une période r=3870, qui a fournit les 2 solutions n1= 181 et n2= 173 (dont le produit est bien 31313).+Cette dernière valeur de "aa permis de trouver une période r=3870, qui a fournit les 2 solutions n1= 181 et n2= 173 (dont le produit est bien 31313).
  
-Si on recommence, on voit que le temps d'exécution change pas mal en fonction de la pertinence du choix du "a". Quelquefois, la réponse est quasi immédiate, d'autre fois, cela peut dépasser la dizaine de seconde pour des valeurs de cette taille. +Si on recommence avec d'autres valeurs, on voit que le temps d'exécution change pas mal en fonction de la pertinence du choix du "a". Quelquefois, la réponse est quasi immédiate, d'autre fois, cela peut dépasser la dizaine de seconde pour des valeurs de cette taille. 
  
 Essayez par exemple le code d'essai suivant: Essayez par exemple le code d'essai suivant:
Ligne 244: Ligne 244:
 Le principe est assez simple: Le principe est assez simple:
  
-on commence par calculer les 10000 premières valeurs de la fonction f = pow(a,k,P) pour k=0 à (imax-1)=9999. Bien sûr, si on trouve un f=1 avant d'arriver au bout, on renvoie la valeur de r=k car on l'a trouvé!+on commence par calculer les 10000 premières valeurs de la fonction f = pow(a,k,P) pour k=0 à (imax-1)=9999.  
 + 
 +Bien sûr, si on trouve un f=1 avant d'arriver au bout, on renvoie la valeur de r=k car on l'a trouvé!
  
 Si ce n'est pas le cas, on va calculer la fonction pour un certain nombre de k commençant à imax, se terminant à P, par pas de "pas". Ce pas est fixé a priori à %%(P-imax)//10000%%, mais il ne doit pas être inférieur à 1. Si ce n'est pas le cas, on va calculer la fonction pour un certain nombre de k commençant à imax, se terminant à P, par pas de "pas". Ce pas est fixé a priori à %%(P-imax)//10000%%, mais il ne doit pas être inférieur à 1.
Ligne 270: Ligne 272:
 calcul de n2 calcul de n2
 Solution: n1= 2087 n2= 2371 Solution: n1= 2087 n2= 2371
-2087 2371 4948277 4948277 102.754698033+2087 2371 4948277 102.754698033
 </code> </code>
  
 On a bien trouvé le résultat, mais en 102 secondes. On a bien trouvé le résultat, mais en 102 secondes.
  
-Les limites "raisonnables" (quelques minutes) correspondent à un produit de nombres à 16 bits, ce qui est déjà pas mal.+Autre exemple:
  
-Etcurieusement, avec ces produit de nombres à 16 bits, le calcul de la période se passe plutôt bien, et c'est le calcul de %%a**(r//2)%% qui dure trop de temps!+<code python> 
 +Nombre à factoriser: 
 +P= 5611561 (produit de  2621  et de  2141 ) 
 +=====> Essai avec a= 3948837 
 +période r= 280340 
 +calcul de a**(r//2) 
 +calcul de n1 
 +calcul de n2 
 +Solution: n1= 2621 n2= 2141 
 +2621 2141 5611561 4.17664580239 
 +</code> 
 + 
 +le bon résultat [26212141] a été trouvé en 4 secondes avec un seul essai a=3948837 qui a donné la période r=280340. 
 + 
 +Les limites "raisonnables" (quelques minutes?) correspondent à un produit de nombres à 12 ou 16 bits, ce qui est déjà pas mal. 
 + 
 +Et, curieusement, avec des nombres de cette taille, le calcul de la période se passe plutôt bien, et c'est le calcul de %%a**(r//2)%% qui dure trop de temps!
  
 On est donc encore très loin de factoriser un nombre de 2048 bits (composé d'environ 600 chiffres)... On est donc encore très loin de factoriser un nombre de 2048 bits (composé d'environ 600 chiffres)...
Ligne 288: Ligne 306:
  
 En ce qui concerne le calcul de la période, si on n'a pas d'ordinateur quantique sous la main (:-D), peut-être qu'une FFT appliquée à f(k) serait une bonne solution? En ce qui concerne le calcul de la période, si on n'a pas d'ordinateur quantique sous la main (:-D), peut-être qu'une FFT appliquée à f(k) serait une bonne solution?
 +
 +En ce qui concerne le calcul de %%a**(r//2)%%, il faut se rappeler que ça se fait avec des nombres très grands, et que le résultat est énorme. Pour prendre le dernier exemple, essayer donc de calculer %%3948837**(280340//2)%%, et imaginez un peu ce que ça donnerait pour des nombres de plusieurs centaines de chiffres...
  
 \\ \\
factorisation_shor.txt · Dernière modification: 2009/01/06 08:20 de tyrtamos