Test di primalità probabilistici Il piccolo teorema di Fermat afferma che Se a è in intero e p è un numero primo allora ap=a modulo p Applicando la legge logica che afferma essere equivalenti p => q e non q => non p abbiamo Se esiste un intero a 1 < a < p tale che ap != a modulo p allora p non è primo (probabilmente p non è primo) Allo stesso modo ricordiamo un altro importante teorema che afferma: per ogni coppia di interi x, y e per ogni p primo => (x+y)p=xp+yp (mod p) La dimostrazione di questo teorema molto semplice si basa sul teorema del binomio (sviluppo) Quindi in modo analogo: Se esiste una coppia di interi x, y | (x+y)p != xp+yp (mod. p) allora p non è primo (probabilmente p non è primo) Possiamo allora tentare di unire i due teoremi per formulare un interessante algoritmo probabilistico che ci dirà in modo veloce se un numero è un primo o è composto. ALGORITMO: Sia dato un p intero dispari e non un quadrato perfetto Tramite un generatore di numeri casuali formiamo delle coppie (un certo numero, più è alto più è alta la probabilità di non fallire) di interi casuali x, y con 1 < x < p, 1 < y < p Se troviamo per tutte le coppie x, y (x+y)p = xp+yp (mod. p) e (xp=x mod p, yp=y mod p) allora p è probabilmente primo. Altrimenti se esistono x, y | (x+y)p = xp+yp (mod. p) e (xp != x mod p oppure yp != y mod p) allora probabilmente p non è primo. Nota: (x+y)p=xp+yp=x+y=(x+y) mod p ovvero zp=z mod p , con z= x+y