Un nuovo test di primalità

Un nuovo test di primalità
Il piccolo teorema di Fermat afferma che:
se p è un numero primo allora per ogni intero a con MCD(a, p)=1 (p non divide a) , allora
a^(p-1) = 1 mod p (qui l'= sta per congruo)
Il teorema sui residui quadratici afferma che
per ogni numero primo p > 2 e per ogni numero a non divisibile per p (MCD(a, p)=1) si
verifica uno dei seguenti fatti:
a^((p-1)/2) = 1 oppure a^((p-1)/2)=-1 mod p (qui l'= sta per congruo)
Da questi due importantissimi teoremi applicando l'equivalenza logica che
p=>q equivale a non q => non p
e che un numero intero è primo o non è primo
formuliamo il seguente test di primalità ove assumiamo che N sia un numero dispari e non un
quadrato perfetto (in questi casi sarebbe immediato verificarne la primalità anche per numeri con
moltissime cifre):

N dispari e non un quadrato perfetto (altrimenti N non è primo)

Se esiste un a intero 2 < a < N tale che

MCD(a,N)= 1 e

a^(N-1) != 1 mod N e

a^((N-1)/2) !=1 mod N AND a^((N-1)/2) !=-1
■

allora N non è primo
altrimenti è primo
Il codice seguente è scritto in Pyton ed è di semplice lettura
def mcd(a,b):
if b == 0:
return a
else:
return mcd(b, a%b)
def test2primo(N):
j = 2;
while j < N:
if mcd(j, N) == 1:
if (j**(N-1)%N != 1%N) and ((j** ((N-1)/2))%N != 1%N) and ((j** ((N1)/2))%N != -1%N):
return 'non è primo';
j = j+1;
return 'è primo';