Bonsoir,
ton programme ne fait pas du tout ce que tu veux : il renvoie toujours 2 si p est premier, mais 2 n'est pas toujours un générateur de , même si p est premier.
Je ne sais pas si tu veux la liste des générateurs ou seulement un générateur.
Disons que j'écrirais une fonction est_generateur(a,p) qui suppose p premier, il faut donc faire le test avant de l'utiliser.
def est_generateur(a,p):
b=a%p
if b==0 :
return False
for i in range(1,p-1):
if b==1 :
return False
b=b*a%p
return True
L'idée est que l'on a toujours a
p-11 mod p quand p est premier ( et que a est un entier qui n'est pas un multiple de p ).
Si a est générateur c'est la première puissance de a qui vérifie cette propriété.