Exponentiation modulaire python
Bonsoir,
Pour m'exercer, j'ai programm� une exponentiation modulaire qui est tr�s efficace ( https://fr.wikipedia.org/wiki/Exponentiation_modulaire , derni�re m�thode expos�e).
Pour r�sumer, il faut convertir l'exposant en binaire et en partant de la droite, faire certaines op�rations si on rencontre un 0 ou 1.
Mon code semble fonctionnel (je compare le r�sultat avec la fonction powmod de gmpy2), cela fonctionne.
Mais cela d�raille avec de plus grands nombres, mais parfois aussi avec de plus petits nombres.
Ma question est : ai-je fait une erreur quelque part ou alors c'est la conversion en binaire sur des grands nombres qui ne se fait pas correctement ?
Voici le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
import time
import gmpy2
from gmpy2 import mpz
a=215
b=54
c=10485
exposant=bin(b)[2:]
exposant=list(exposant)
base=a
result=1
start=time.time()
for i in range(int(len(exposant))-1,0,-1):
if int(exposant[i])==0:
base=pow(base,2) % c
else:
result = (base*result) % c
base = pow(base, 2) % c
end=time.time()
print("Méhode 4 : ",end-start," ",result)
start=time.time()
nombreb=gmpy2.powmod(a,b,c)
end=time.time()
print("Méthode 3 : ",end-start," ",nombreb) |
Si quelqu'un pouvait m'�clairer, merci par avance !