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 :
Si quelqu'un pouvait m'�clairer, merci par avance !
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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)
Partager