Teoria dei numeri e Crittografia: lezione del 7 dicembre 2011
Numeri di Mersenne.
Dopo avere studiato i numeri di Fermat (successivi di una potenza di 2), studieremo i numeri che
precedono una potenza di 2.
Poniamo Mk=2k-1, con k>1: un tale numero naturale (dispari) è detto numero di Mersenne.
Come per i numeri di Fermat, studiamo quando un numero di Mersenne Mk è primo: vedremo in
tale caso che k non può essere un esponente qualunque.
Teorema.
Se Mk=2k-1 (con k>1) è un numero primo, l’esponente k è necessariamente primo.
Dimostrazione:
Per assurdo sia k non primo, e sia k=ts, con 1<t,s<k.
Sfruttando la proprietà (già considerata in altre dimostrazioni) che per ogni naturale s si ha:
(x-y)(xs-ys)
Applicata in particolare con y=1, x=2t, si ottiene che x-y=2t-1 è divisore di xs-ys=2ts-1=2k-1=Mk ,
con 2t-1>1 (perché t>1) e 2t-1<Mk (perché t<k), contraddizione perché Mk è primo.
Dunque, per cercare valori primi di Mk=2k-1 si deve restringere la ricerca al caso in cui l’esponente
k sia primo.
Esistono tuttavia esponenti k primi per cui Mk non è primo: per esempio per k=11 si ha
Mk=211=2047=2389, non primo.
Notizie sulla situazione attuale della ricerca sui numeri di Mersenne primi si possono trovare sul
sito: www.mersenne.org (progetto GIMPS: Great Internet Mersenne Primes Search).
A tutt’oggi sono stati trovati 46 numeri di Mersenne primi: il più grande è stato scoperto
nell’Agosto del 2008: è il numero 243.112.609-1, ed ha 12.978.189 cifre in base 10.
Le tecniche per verificare se un numero di Mersenne è primo fanno uso del cosiddetto criterio di
Lucas-Lehmer, che ora esporremo.
Definiamo la successione S1, S2, …., Sn,….. di numeri naturali nel modo seguente:
S1 = 4; per ogni i>1: Si = Si-12-2
(quindi per esempio S2=42-2=14, S3=142-2=194 etc.)
Il criterio di Lucas-Lehmer è enunciato nel seguente Teorema (di cui omettiamo la dimostrazione):
Teorema di Lucas-Lehmer.
Dato un numero di Mersenne Mp=2p-1, con p primo >2, si ha:
Mp è primo  Sp-1  0 (mod Mp)
Si può allora costruire un algoritmo deterministico di primalità per i numeri di Mersenne Mp=2p-1,
con p primo >2, nel modo seguente:
1) Si calcolano i numeri interi T1, T2, …., Tp-1 ponendo:
T1 = 4; per ogni i>1: Ti = (Ti-12-2)modMp
(notare che per ogni i si ha 0 Ti<Mp ; inoltre per ogni i si ha anche SiTi (mod Mp) come si
dimostra facilmente per induzione)
2) Se Tp-1=0 (ciò equivale ad Sp-1  0 (mod Mp)) si esce con output “Mp è primo”; in caso
contrario si esce con output “Mp è composto”.
Il numero Mp ha lunghezza binaria p (in base 2 ha p cifre tutte =1). Esaminando la complessità
dell’algoritmo, si nota che il calcolo di ognuno dei Ti comporta:
il calcolo del prodotto Ti-12 di 2 fattori <Mp quindi di lunghezza  p (complessità di ordine O(p2)); il
calcolo della differenza Ti-12-2, dove Ti-12 ha lunghezza  2p (complessità di ordine O(p))); il calcolo
della riduzione (Ti-12-2)modMp, dove (Ti-12-2) ha lunghezza  2p (complessità di ordine O(p2)).
In totale il calcolo di ognuno dei Ti ha complessità di ordine O(p2); poiché il numero dei Ti da
calcolare è (p-1)(quindi di ordine O(p)), la complessità totale del test è di ordine O(p3), dove
p=L(Mp) .
Anche nel caso in cui il numero di Mersenne Mp non sia primo, i suoi divisori primi (almeno nel
caso p primo >2) hanno una struttura particolare:
Teorema.
Se p è un primo >2, per ogni divisore primo q di Mp=2p-1 si ha q  1 (mod p), quindi q=1+kp con k
naturale, e inoltre si ha q  1,7 (mod 8).
Dimostrazione:
Essendo Mp dispari, si ha q dispari. Poiché 2p  1 (mod q), si ha [2] p=[1] in Zq* e se s=ord([2]) è
il periodo di [2] in Zq*, si ha sp, da cui, essendo p primo, s=p (perché s1 in quanto [2] [1]).
Il periodo s=p è divisore della cardinalità q-1 di Zq* , dunque q  1 (mod p), q=1+kp con k naturale
e in particolare k pari perché q, p sono dispari).
Infine, posto k=2t, [2] (q-1)/2=([2] p)t=[1] in Zq* , 2(q-1)/2  1 (mod q), e per il criterio di Eulero 2 è
resto quadratico modulo q, dunque (2/q)=1, e ciò sappiamo che avviene solo per q  1,7 (mod 8).
Per trovare un divisore primo di Mp (con p primo >2 fissato), si può procedere allora facendo
assumere in successione al parametro t i valori interi positivi t=1,2,…., e verificando con
l’algoritmo della divisione se il numero q=1+2tp è  1,7 (mod 8) ed è divisore di Mp. Il minimo
valore di t per cui ciò avviene fornisce con certezza un divisore primo q di Mp (se q non fosse primo
avrebbe un divisore primo q1<q, ma q1 sarebbe a maggior ragione divisore di Mp, quindi sarebbe
 1,7 (mod 8) e della forma q1=1+2t1p con t1<t, contro la minimalità di t).
Dopo avere trovato un divisore primo q di Mp, si può ripetere il ragionamento sul numero Mp/q per
trovare altri divisori primi di Mp e pervenire infine alla completa fattorizzazione di Mp in prodotto di
primi.