I numeri primi - Home Page

Università degli Studi di Milano
Polo Didattico e di Ricerca di Crema
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Matematica del Discreto
I numeri primi
Studenti:
Filippo Gandaglia
Massimo Manara
Andrea Gardoni
Luigi Margheritti
657228
656814
656751
660216
Docente del corso:
Laura Citrini
Anno Accademico 2005/2006
.
.
Indice
2
Indice
1 I numeri primi
1.1 Perché 1 non è un numero primo . . . . . . . . . . . . . . . .
1.2 Certificato di primalità . . . . . . . . . . . . . . . . . . . . . .
5
6
7
2 Il teorema fondamentale dell’aritmetica
7
3 Fermat
3.1 Piccolo teorema di Fermat . . . . . . . . . . . . . . . . . . . .
3.2 Numero primo di Fermat . . . . . . . . . . . . . . . . . . . . .
8
8
8
4 Teorema di Mersenne
9
5 Test di Lucas Lehmer
11
5.1 Lucas Lehemer test . . . . . . . . . . . . . . . . . . . . . . . . 12
6 Teorema di Wilson
13
6.1 Applicazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6.2 Formula esatta per n(x) . . . . . . . . . . . . . . . . . . . . . 14
7 Solovay-Strassen primality test
15
8 Miller-Rabin primality test
16
9 Numeri primi buoni
18
10 Numero primo illegale
18
11 Numeri primi Sexy
19
12 Cenni all’ipotesi di Riemann
19
13 Descrizione del progetto
13.1 Pagina iniziale . . . . . . . . . . . . . .
13.2 Scelta Algoritmi Implementati . . . . .
13.3 Verifica della primalità di Fermat . . .
13.4 Test di Lucas - Lehmer . . . . . . . . .
13.5 Verifica della primalità tramite teorema
13.6 Verifica della primalità tramite teorema
13.7 Test di primalità di Miller-Rabin . . .
13.8 Calcolo dei Numeri di Fermat . . . . .
13.9 Calcolo dei Numeri di Mersenne . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
di Wilson . . . . . .
di Solovay-Strassen .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
21
21
22
23
24
25
26
27
28
29
Indice
13.10Progressioni di numeri primi
13.11Numeri primi Sexy . . . . .
13.12Numeri primi Fattoriali . . .
13.13Numeri primi Buoni . . . .
Bibliografia
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
30
31
32
33
34
Elenco delle tabelle
4
Elenco delle figure
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
“Seven and a half logs should do it1 !”. Immagine di Larry
Gonick [3] . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gary L. Miller e Michael O. Rabin . . . . . . . . . . . . . .
Paul Erdös . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pagina iniziale progetto . . . . . . . . . . . . . . . . . . . . .
Scelta algoritmi implementati . . . . . . . . . . . . . . . . .
Verifica della primalità di Fermat . . . . . . . . . . . . . . .
Verifica della primalità tramite il test di Lucas - Lehmer . .
Verifica della primalità tramite il teorema di Wilson . . . . .
Verifica della primalità tramite Solovay-Strassen . . . . . . .
Verifica della primalità tramite Miller-Rabin . . . . . . . . .
Numeri di Fermat . . . . . . . . . . . . . . . . . . . . . . . .
Numeri di Mersenne . . . . . . . . . . . . . . . . . . . . . .
Progressioni numeri primi . . . . . . . . . . . . . . . . . . .
Numeri primi Sexy . . . . . . . . . . . . . . . . . . . . . . .
Numeri primi Fattoriali . . . . . . . . . . . . . . . . . . . . .
Numeri primi Buoni . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
16
18
21
22
23
24
25
26
27
28
29
30
31
32
33
.
.
.
.
.
.
.
.
.
.
.
.
.
5
10
23
24
25
26
27
28
29
30
31
32
33
Elenco delle tabelle
1
2
3
4
5
6
7
8
9
10
11
12
13
I numeri primi minori di 1000 . . . .
I primi numeri primi di Mersenne . .
Comportamento Fermat . . . . . . .
Comportamento Lucas - Lehmer . . .
Comportamento Wilson . . . . . . .
Comportamento Solovay-Strassen . .
Comportamento Miller-Rabin . . . .
Comportamento Numeri di Fermat .
Comportamento Numeri di Mersenne
Progressioni numeri primi . . . . . .
Numeri primi Sexy . . . . . . . . . .
Numeri primi Fattoriali . . . . . . . .
Numeri primi Buoni . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1 I numeri primi
1
5
I numeri primi
L’insieme dei numeri primi è un sottoinsieme dei numeri naturali.
Un numero primo, in matematica, è un numero naturale divisibile unicamente
per sé stesso e per l’unità e diverso, per convenzione, dall’unità. Detto in
altro modo, deve avere esattamente due fattori distinti.
I numeri primi sono infiniti. La più antica dimostrazione pervenutaci
è quella di Euclide, La proposizione 20 del Libro IX degli Elementi afferma
infatti che I numeri primi sono più di una qualsiasi assegnata moltitudine di
numeri primi. La sua dimostrazione parte da un qualunque insieme di numeri
primi p1 , p2 , · · · , pn , e costruisce un numero primo diverso da tutti i pi . Si
inizia moltiplicando tra di loro tutti questi numeri e sommando un’unità,
ottenendo come risultato un nuovo numero q che potrà essere o non essere
primo. Se q è primo, la dimostrazione è terminata; altrimenti esso dovrà
avere un divisore d. Per costruzione, però, d non può essere nessuno dei
pi ; infatti la divisione pid dà sempre 1 come resto. Pertanto, d è l’ulteriore
numero primo cercato.
29
71
113
173
229
281
349
409
463
541
601
659
733
809
863
941
2
31
73
127
179
233
283
353
419
467
547
607
661
739
811
877
947
3
37
79
131
181
239
293
359
421
479
557
613
673
743
821
881
953
5
41
83
137
191
241
307
367
431
487
563
617
677
751
823
883
967
7
43
89
139
193
251
311
373
433
491
569
619
683
757
827
887
971
11
47
97
149
197
257
313
379
439
499
571
631
691
761
829
907
977
13
53
101
151
199
263
317
383
443
503
577
641
701
769
839
911
983
17
59
103
157
211
269
331
389
449
509
587
643
709
773
853
919
991
19
61
107
163
223
271
337
397
457
521
593
647
719
787
857
929
997
Tabella 1: I numeri primi minori di 1000
23
67
109
167
227
277
347
401
461
523
599
653
727
797
859
937
1 I numeri primi
6
Figura 1: “Seven and a half logs should do it2 !”. Immagine di Larry Gonick
[3]
1.1
Perché 1 non è un numero primo
Il numero 1 non viene considerato primo per vari motivi, fra i quali citiamo
quelli che riteniamo più importanti.
1. Il numero 1 ha un solo divisore, mentre tutti i numeri primi ne hanno
due.
Questo è solo un esempio di un fenomeno generale: per molte funzioni aritmetiche assolutamente naturali, come la funzione ϕ di Eulero
definita dalla cardinalità dell’insieme degli interi 0 ≤ a < n tali che
(a, n) = 1, sarebbe necessario avere due formule distinte, una valida per 1 e l’altra per i numeri primi p ≥ 2. In questo caso, infatti,
dovremmo dire che ϕ(p) = p − 1 per tutti i p ≥ 2, ma ϕ(1) = 1.
2. Molti teoremi, per esempio il Teorema Fondamentale dell’Aritmetica
(vedi § 2), dovrebbero essere enunciati in un modo molto più complicato
per tener conto delle proprietà speciali di 1 [4, 5].
2
L’immagine si colloca nel contesto dell’algoritmo AKS, sviluppato da Agrawal, Kayal
e Saxena; il quale lavora in d7.5 passi. Successivamente sarà migliorato da Lenstra e
Pomerance in d6 passi.
2 Il teorema fondamentale dell’aritmetica
7
3. Nel crivello di Eratostene [4], se il numero 1 fosse considerato primo si
cancellerebbero tutti i numeri tranne lo stesso 1 al primo passo.
In conclusione, possiamo riassumere la nostra argomentazione cosı̀: se decidessimo di considerare primo anche 1, dovremmo rassegnarci a fare continue
eccezioni perfino nelle definizioni o nei teoremi più semplici. Per economia,
dunque, preferiamo dare una definizione che a prima vista può sembrare meno naturale, ma con la quale non c’è questa necessità. In effetti si tratta di
un principio generale della Matematica: l’utilità e la versatilità delle definizioni sono decidibili solo “a posteriori”, cioè solo dopo averle viste all’opera
e confrontate con possibili definizioni alternative.
1.2
Certificato di primalità
In matematica ed informatica, un certificato di primalità, o dimostrazione,
prova di primalità, è una dimostrazione succinta che un certo numero sia
primo.
Un certificato di primalità permette cosı̀ di non usare un algoritmo dispendioso in termini computazionali per verificare la primalità di un certo numero
certificato.
Con il termine succinta significa che il numero certificato debba avere un
certo numero di cifre.
Il certificato più famoso è quello di Vaughan Pratt, concepito nel 1975, basato
sul teorema di Lehmer.
2
Il teorema fondamentale dell’aritmetica
Il risultato che vedremo qui di seguito è cosı̀ importante da contenere l’aggettivo “fondamentale” nel nome: fra i vari enunciati possibili, scegliamo quello
in cui la rappresentazione in forma di prodotto è effettivamente unica.
Teorema Ogni numero naturale n ≥ 2 può essere espresso nella forma
n = pα1 1 · pα2 2 · · · pαk k =
k
Y
pαi i
(1)
i=1
dove i pi sono numeri primi con p1 < p2 · · · < pk , ed αi ∈ N∗ per i = 1, . . . , k,
in un unico modo
3 Fermat
3
8
Fermat
3.1
Piccolo teorema di Fermat
Il piccolo teorema di Fermat dice che se p è un numero primo, allora per ogni
intero a appartenente all’intervallo aperto (0, p):
ap ≡ a
(mod p)
Questo significa che se si prende un qualunque numero a, lo si moltiplica
per sé stesso p volte e si sottrae a, il risultato è divisibile per p [8, 10]. È
spesso espresso nella forma equivalente: se p è primo e a è un intero coprimo
rispetto a p, allora:
ap−1 ≡ 1 (mod p)
Il piccolo teorema di Fermat è generalizzato dal teorema di Eulero: per ogni
modulo n ed ogni intero a coprimo rispetto a n, si ha:
aϕ(n) ≡ 1
(mod n)
Dove ϕ(n) indica la funzione phi3 di Eulero, che conta il numero di interi fra
1 ed n coprimi rispetto a n. Si tratta di una generalizzazione in quanto se
n = p è un numero primo, allora ϕ(p) = p − 1.
3.2
Numero primo di Fermat
Un numero primo di Fermat è un numero primo esprimibile come:
n
Fn = 22 + 1
con n intero positivo.
I numeri primi di Fermat prendono il nome dal matematico francese Pierre de
Fermat del diciassettesimo secolo. Fermat credeva, erroneamente, che tutti i
numeri della forma indicata sopra fossero numeri primi. In effetti, questo è
3
La funzione phi di Eulero ϕ(n), detta anche funzione totiente o semplicemente funzione
di Eulero, è definita, per ogni intero positivo n, come il numero degli interi positivi minori
di n tali che sono coprimi con n. Ad esempio, ϕ(8) = 4 poiché i numeri coprimi di 8 sono
quattro: 1, 3, 5 e 7.
4 Teorema di Mersenne
9
vero per i primi cinque:
0
F0 = 22 + 1 = 3
1
F1 = 22 + 1 = 5
2
F2 = 22 + 1 = 17
3
F3 = 22 + 1 = 257
4
F4 = 22 + 1 = 65537
Ma Leonhard Euler dimostrò che Fermat si sbagliava. Infatti il seguente
numero non è primo:
5
F5 = 22 + 1 = 4294967297 = 641 · 6700417
Se Fn non è un numero primo, viene detto semplicemente numero di
Fermat.
Attualmente, non sappiamo se ci sono altri numeri primi di Fermat per n >
10. In un sistema numerico binario, tutti i primi di Fermat sono palindromi
primi.
4
Teorema di Mersenne
Un numero primo di Mersenne è un numero primo esprimibile come:
Mn = 2n − 1
con n intero positivo.
I numeri primi di Mersenne prendono il nome dal matematico francese
Marin Mersenne (1588-1648). Mersenne compilò una lista di numeri primi di
Mersenne considerando tutti i valori di n fino a n = 257. Tale lista conteneva
però alcuni errori: includeva M67 e M257 (che non sono primi), mentre non
comparivano M61, M89 e M107 (che sono primi)[11].
• Se Mn è primo, allora anche n è primo. Invece n primo non garantisce
che Mn sia primo.
• Se Mn non è un numero primo, viene detto semplicemente numero di
Mersenne.
4 Teorema di Mersenne
Numero
M2
M3
M5
M7
M13
M17
M19
M31
M61
M89
M107
M127
10
Valore
22 - 1 = 3
23 - 1 = 7
25 - 1 = 31
27 - 1 = 127
213 - 1 = 8191
131071
524287
2147483647
2305843009213693951
618970019642690137449562111
162259276829213363391578010288127
170141183460469231731687303715884105727
Tabella 2: I primi numeri primi di Mersenne
I numeri primi di Mersenne sono collegati con i numeri perfetti. Nel
quarto secolo A.C. Euclide dimostrò che se Mn è un primo di Mersenne,
allora:
Mn · (Mn + 1)
= 2n−1 (2n − 1)
2
è un numero perfetto. Nel XVIII secolo Eulero provò che tutti i numeri
perfetti pari hanno questa forma. Nessun numero perfetto dispari è conosciuto e si congettura che non ne esistano.
I calcolatori hanno accelerato la scoperta dei primi di Mersenne. I primi
dodici numeri primi di Mersenne stati scoperti prima del ventesimo secolo.
Alla fine del millennio i primi di Mersenne conosciuti erano 38; oggi invece
se ne conoscono 43 e i nove più recenti sono stati scoperti nell’ambito della GIMPS, la Great Internet Mersenne Prime Search, iniziativa che sfrutta
le risorse disponibili di migliaia di computer in rete per cercare i primi di
Mersenne. Il più grande numero primo attualmente conosciuto è proprio un
numero di Mersenne trovato dagli statunitensi Curtis Cooper e Steven Boone
dell’Università del Missouri nell’ambito della GIMPS; scritto in base dieci è
un numero di 9.152.052 cifre, precisamente:
M30402457 = 230402457 − 1
(2)
Il test di primalità usato dal GIMPS è il test di Lucas - Lehmer. In un
5 Test di Lucas Lehmer
11
sistema numerico binario, tutti i primi di Mersenne sono primi palindromi e
primi permutabili [9].
5
Test di Lucas Lehmer
Il test di Lucas-Lehmer è una verifica della primalità dei primi di Mersenne.
In sintesi, per p numero primo, detto Mp = 2p − 1 il p-esimo numero di
Mersenne, esso è primo se e solo se divide Lp − 1, dove Ln è la successione
definita ricorsivamente come:
Ln+1 = L2n − 2
a partire da L1 = 4.
Il test è stato sviluppato originariamente dal matematico Lucas nel 1870,
e semplificato da Lehmer nel 1930. Il test è talmente rapido e facile da
programmare, che nel 1978 due studenti delle superiori dimostrarono che il
numero di Mersenne 221701 - 1 è primo, battendo il precedente record del
più alto numero primo allora conosciuto.
È possibile anche un’ottimizzazione nel tempo di calcolo, per poter trattare numeri maggiori, dato che Ln cresce molto velocemente, all’aumentare
di n, per diventare presto intrattabile. Si può sostituire, alla successione
precedente, quella specifica per il numero da verificare Mn , ricavata come
segue:
Ln+1 = (L2n − 2)mod Mp
dove mod è il modulo, ossia il resto della divisione per Mn . Questa successione ha però lo svantaggio di essere utile solo per i numeri di Mersenne
minori o uguali a Mp .
Enunciato
Sia p un numero primo. Il corrispondente numero di Mersenne Mp =
2p − 1 è primo se e solo se
Lp−1 mod Mp ≡ 0
Osservazione:
Non è restrittivo considerare i numeri di Mersenne Mp con p primo anziché
Mn con n numero naturale. Si dimostra infatti che se n non è primo allora
5 Test di Lucas Lehmer
12
anche Mm non è primo.
Dimostrazione
√
√
Per la sufficienza: siano u = 2 + 3 e v = 2 − 3. È facile allora mostrare
per induzione che:
Ln = u2
n−1
+ v2
n−1
Poiché Mp divide Lp − 1, esiste un intero R tale che
Lp−1 = RMp
ossia
u2
Moltiplicando per u2
p−2
p−2
+ v2
p−2
= RMp
, ottengo
u2
p−1
= R M p u2
p−2
−1
Elevando al quadrato
u
2p
= R Mp u
2p−2
2
−1
Procediamo per assurdo. Supponiamo che M p sia composto e prendiamo un
suo divisore d minore
√ della sua radice quadrata. Sia G il gruppo dei numeri
nella forma a + b 3 mod d che sono anche invertibili: G ha almeno d2 − 1
p−1
elementi. Se riscriviamo la 1 e la 2 modulo d, otteniamo u2
≡ −1mod d
2p
e u ≡ 1mod d rispettivamente. Quindi u è un elemento di G di periodo
2p. Dato che il periodo di un elemento può al massimo essere pari al numero
degli elementi del gruppo, abbiamo la seguente disuguaglianza
2p ≤ d2−1 < Mp = 2p−1
(3)
Dato che abbiamo una contraddizione, Mp non ha divisori, e dunque è
primo.
5.1
Lucas Lehemer test
Il test di Lucas Lehemer, è un test di primalità per un numero naturale n;
richiede che i fattori primi di n − 1 siano noti.
Se esiste n < a < 1 tale che:
an−1 ≡ 1
(mod n)
6 Teorema di Wilson
13
e
a(n−1)/q 6≡ 1
(mod n)
Per tutti i fattori primi q di n − 1, allora n è primo. Se non viene trovato
nessun numero, allora n è composto.
6
Teorema di Wilson
Il teorema di Wilson afferma che, dato numero primo p > 1,
(p − 1)! ≡ −1(mod p)
In parole: L’intero n ≥ 2 è primo se e solo se n divide (n − 1)! + 1. Tale
condizione è necessaria e sufficiente per stabilire se un numero n ≥ 2 è un
numero primo.
6.1
Applicazioni
Il teorema di Wilson è inutilizzabile come test di primalità, dal momento che
il calcolo esplicito di (n − 1)! mod p, richiedendo n moltiplicazioni, è difficile
per n grande.
Usando il teorema di Wilson, abbiamo per ogni primo p:
1 · 2 · · · (p − 1) ≡ −1(mod p)
perviene:
1 · (p − 1) · · · m · (p − m) ≡ 1 · (−1) · 2 · (−2) · · · m · (−m) ≡ −1(mod p) (4)
con p = 2m + 1. Riscrivendo la (4) in forma compatta si ottiene la (5):
m
Y
j 2 ≡ (−1)m+1 (mod p)
(5)
j=1
E quindi la primalità è determinata dai residui quadratici modulo p.
Possiamo utilizzare questo fatto per dimostrare parte di un noto risultato:
−1 è un residuo quadratico mod p se p ≡ 1 (mod 4). Supponiamo infatti
p = 4k + 1 per qualche intero k. Allora possiamo prendere m = 2k nella
relazione precedente e concludere che:
!2
2k
2k
Y
Y
j
=
j 2 ≡ (−1)2k+1 = −1(mod p)
(6)
j=1
j=1
6 Teorema di Wilson
6.2
14
Formula esatta per n(x)
Dal teorema di Wilson si può ricavare facilmente una formula per il numero
di numeri primi minori di x; riportata in (7), la quale vale
(p − 1)! ≡ −1(mod p),
(7)
per ogni numero primo p, e inoltre:
(n − 2)! ≡ 0,
per ogni numero composto n > 4. Per n ≥ 4:
X (n − 2)! π(x) =
n
+2
n
5≤n≤x
dove {x} indica
parte frazionaria di x. Questa formula sfrutta il fatto che,
n la o
(n−2)!
è uguale a 0 se n è composto, a n1 se n è primo. Essa
per n > 4,
n
risulta comunque inutile nelle applicazioni poiché richiede una mole di calcoli
di gran lunga più elevata del crivello di Eratostene, e va quindi considerata
solo come una curiosità matematica.
7 Solovay-Strassen primality test
7
15
Solovay-Strassen primality test
Il test di primalità Solovay-Strassen, è stato sviluppato da Robert M. Solovay
e Volker Strassen; è un test probabilistico per determinare se un numero è
composto o se è probabilmente primo.
Venne impiegato nel crittosistema RSA.
Tuttavia questo algoritmo è poco utilizzato a vantaggio del test di MillerRabin.
Algoritmo
1. n è un numero dispari. Vogliamo sapere se n è primo.
2. Scegliamo un numero casuale a, 1 < a < n. Se gcd(a, n) 6= 1 allora n
non è primo.
3. Calcoliamo i valori
(n − 1)
≡a 2
(mod n)
a
δ≡
(simbolo di Jacobi)
n
4. Se gcd(a, n) > 1 oppure 6= δ allora n è composto.
5. Altrimenti n è probabilmente primo con una probabilità maggiore o
uguale del 50%.
6. Esecuzione dei passi precedenti m volte:
(a) Se come output si ottiene “Composto” almeno una volta: output
è “Composto”
(b) Se come output si ottiene “Probabilmente primo” in tutti le m
prove; output è “Primo”
1
3
5
Inputs : n : numero posto sotto test ;
k : parametro che determina la confidenza
Output : composto se n è composto , altrimenti prob . primo
------------------------------------------------------------ripeti k volte :
7
9
scegli a in modo casuale da un intervallo [1 ,n -1]
x ← (a/n)
8 Miller-Rabin primality test
16
se x = 0 or a(n−1)/2 mod n 6= x then return composto
11
return probabilmente primo
Codice 1: Solovay-Strassen primality test
8
Miller-Rabin primality test
Miller-Rabin è un algoritmo che prova se un numero è primo o composto;
con un certo grado di probabilità [12, 14, 17, 6].
Figura 2: Gary L. Miller e Michael O. Rabin
Sappiamo che 1 e -1 sono sempre 1 quando ci troviamo in un campo finito
Zp .
Supponiamo che x è una radice di 1 (mod p). Quindi:
x2 ≡ 1
(x − 1)(x + 1) ≡ 0
(mod p)
(mod p)
Finché x non è 1 oppure −1 (mod p), nessuno x − 1 o x + 1 è divisibile
per p. Ma il primo divisore non divide nessuno dei due interi, non è divisibile
per il loro prodotto.
Ora siccome n è dispari, allora possiamo scrivere n − 1 come 2s · d, dove s è
un intero e d è dispari.
Allora una delle seguenti affermazioni deve essere vera:
a ∈ (Z/nZ)∗
ad ≡ 1
(mod n)
oppure
a2
r ·d
≡ −1
ad ≡ 1
(mod n) per 0 ≤ r ≤ s − 1
(mod n)
8 Miller-Rabin primality test
17
Richiamando Fermat:
an−1 ≡ 1
(mod n)
Il Miller-Rabin primality test è basato su:
ad 6≡ 1
(mod n)
e
rd
a2 6≡ −1
(mod n)f or all 0 ≤ r ≤ s − 1
Algoritmo
• Inputs: n: un valore da testare a; k: un parametro che misura la
confidenza
• Output: composto se n è composto, altrimenti probabilmente primo
• scrivi n - 1 come 2s · d fattorizzando le potenze da 2 a n - 1
• ripeti [2, min(n − 1, b2(ln n)2 c)]:
• prendere un intero in modo casuale nell’intervallo [1, n - 1]
rd
• Se ad (mod n) 6= e a2 (mod n) 6= −1 per ogni r in tutto l’intervallo
[0, s-1] allora ritorna composto
• return probabilmente primo
10 Numero primo illegale
9
18
Numeri primi buoni
Erdös e Strauss, chiamano un numero primo p(n) , buono, se p(n) 2 > p(n −
i)p(n + i) per tutti i valori di i da 1 a n − 1 [1, 7].
Figura 3: Paul Erdös
L’infinita sequenza di numeri primi ottimi comincia con: 5, 11, 17, 29, · · · .
10
Numero primo illegale
La visione non autorizzata di DVD è illegale.
Cosı̀ la Motion Picture Association of America decise di fermare la distribuzione del codice DeCSS, il quale può essere usato per decifrare il Content
Scramble System usato per proteggere i DVD.
Questa scelta non interessò alla moltitudine di gente che fa uso legale ed
illegale dei DVD; di conseguenza questo codice come molti altri, finı̀ per essere pubblicato liberamente su internet (e sovente stampato sulle magliette;
T-shirts).
Il codice (DeCSS), può essere trasformato in un numero.
Dopo tutto, i computer lavorano su operazioni binarie, grazie a questo, qualsiasi programma può essere scritto come un intero.
Phil Carmody, è un professore di matematica che ha rappresentato il codice
DeCSS come un numero primo; questo non perché lui non credesse al diritti
di protezioni discografica dei legittimi proprietari e delle case discografiche
ma tuttavia egli pensa che le attuali leggi in materia di “diritto d’autore”,
12 Cenni all’ipotesi di Riemann
19
favoriscano le grandi major a discapito dei singoli consumatori.
Il risultato del suo lavoro fu un numero con 1.401 numeri primi che se rappresentato nella forma esadecimale, esso rappresenta il codice DeCSS [1].
I giudici delle corti americane, decisero che questo suo programma, ed ogni
sua versione, era da considerarsi illegale; in accordo con la Digital Millenium
Copyright Act, or DMCA; in quanto attraverso questo software era possibile
scambiarsi del materiale protetto da diritti d’autore senza pagare. Parte del
codice è:
4856507896573978293098418946942861377074420873513579240196
5207366869851340104723744696879743992611751097377770102744
7528049058831384037549709987909653955227011712157025974666
[...]
4627812126900735183092415301063028932956658436620008004767
7896798438209079761985949364630938058633672146969597502796
8771205724996666980561453382074120315933770309949152746918
3565937621022200681267982734457609380203044791227749809179
5593838712100058876668925844870047077255249706044465212713
0404321182610103591186476662963858495087448497373476861420
880529443
11
Numeri primi Sexy
I numeri primi si dicono sexy quando n e n + 6 sono entrambi primi.
(“Sexy” proviene dal latino “sex”). Le prime coppie di numeri sexy sono:
5 − 11, 11 − 17, 13 − 19, 17 − 23, 23 − 29, 31 − 37, 37 − 43, 47 − 53.
Si possono inoltre trovare le coppie di numeri sexy ma anche le triple e
quadruple; ma non esistono sextuple.
12
Cenni all’ipotesi di Riemann
L’ipotesi o congettura di Riemann è una congettura sulla distribuzione degli
zeri nella funzione zeta di Riemann ζ(s).
Essa fu formulata la prima volta dal matematico Bernhard Riemann, nel
1859. La sua dimostrazione risulta tuttora uno dei principali problemi aperti
della matematica e figura nella lista dei sette Millennium Problems, per la
soluzione di ciascuno dei quali il Clay Mathematics Institute ha offerto un
premio da un milione di dollari. Sebbene la maggior parte dei matematici
12 Cenni all’ipotesi di Riemann
20
ritenga l’ipotesi di Riemann vera, vi sono alcune eccezioni.
La funzione zeta di Riemann ζ(s) ha alcuni zeri definiti “banali” per
s = −2, s = −4, s = −6, · · · .
La congettura di Riemann riguarda invece gli zeri non banali e dice che:
La parte reale di ogni radice non banale è 1/2
Cosı̀ le radici non banali dovrebbero trovarsi tutte sulla linea critica, e sarebbero della forma s = 1/2 + it con t numero reale e i unità immaginaria.
La congettura, espressa in questo modo, potrebbe sembrare limitata alla
conoscenza di questa funzione; ha invece una correlazione sottile ed importante con la teoria dei numeri primi. Eulero scoprı̀ infatti che, effettuando
la produttoria con p che spazia su tutti i numeri primi, la funzione zeta può
anche essere scritta come:
ζ(s) =
∞
Y
1
1 − p−s
j
j=1
(8)
ove pj è l’insieme di tutti i numeri primi.
Stabilire una regola matematica che dimostri se esiste o no una logica nell’assenza di una cadenza nella distribuzione dei numeri primi, significherebbe
comprendere se vi è una “aritmia” totale in quest’ultima o meno; questo
potrebbe avere importanti ricadute sulle applicazioni informatiche odierne e
future, poiché la crittografia utilizza sovente come chiavi numeri interi la cui
fattorizzazione in numeri primi (molto grandi) non deve essere calcolabile in
tempi accettabili [8].
13 Descrizione del progetto
13
21
Descrizione del progetto
L’obiettivo di questo progetto, è quello di presentare una panoramica di
alcuni principali algoritmi nel contesto matematico dei numeri primi.
Il nostro lavoro si è composto di due fasi:
• Studio,
• Implementazione.
La prima fase, quella di studio ci è servita per capire il funzionamento dei
vari algoritmi e le loro basi matematiche; durante questa fase abbiamo usato
molto il lavoro svolto in [2].
Mentre nella seconda fase, abbiamo implementato gli algoritmi studiati nella
fase precedente, con l’aggiunta, di algoritmi e problematiche trattate in [1].
Nelle successive sezioni, verranno riportati degli screen-shot delle varie applet
Java per aiutare il lettore a capire il loro utilizzo.
13.1
Pagina iniziale
Il contenuto della pagina iniziale del progetto, la quale essendo strutturata
con il linguaggio HTML, può essere facilmente inserita in un sito internet, è
riportata in Figura 4 a Pagina 21.
Figura 4: Pagina iniziale progetto
Tramite il link: Algorimi - Applet Java, è possibile raggiungere la pagina di
scelta degli algoritmi implementati.
13 Descrizione del progetto
13.2
22
Scelta Algoritmi Implementati
Tramite questa pagina, mostrata in Figura 5 a Pagina 22, è possibile scegliere
quale algoritmo utilizzare tra:
• Test di primalità
– Verifica Primalità tramite teorema di Fermat
– Test di Lucas - Lehmer
– Verifica della primalità di Pratt
– Verifica della primalità tramite teorema di Wilson
– Verifica della primalità tramite teorema di Solovay-Strassen
– Test di primalità di Miller-Rabin
• Algoritmi di calcolo di numeri primi
– Calcolo dei Numeri di Fermat
– Calcolo dei Numeri di Mersenne
• Altre curiosità sui numeri primi
– Progressioni di numeri primi
– Numeri primi Sexy
– Numeri primi Fattoriali
– Numeri primi Buoni
Figura 5: Scelta algoritmi implementati
13 Descrizione del progetto
13.3
23
Verifica della primalità di Fermat
Tramite l’algoritmo di Fermat è possibile verificare la primalità di un numero.
In Figura 6 a Pagina 23 viene mostrata l’applet, mentre nella Tabella 3 a Pagina
23, viene formalizzato il comportamento dell’applet.
I/O
Input
Output - 1
Output - 2
Descrizione
Inserimento di un numero n minore di 13 per motivi
computazionali
Se il numero inserito è primo, ritorna: “Il numero
è primo!”
Se il numero inserito non è primo, ritorna: “Il
numero non è primo”
Tabella 3: Comportamento Fermat
Figura 6: Verifica della primalità di Fermat
13 Descrizione del progetto
13.4
24
Test di Lucas - Lehmer
Tramite l’algoritmo di Lucas - Lehmer, è possibile verificare la primalità di un
numero.
In Figura 7 a Pagina 24 viene mostrata l’applet, mentre nella Tabella 4 a Pagina
24, viene formalizzato il comportamento dell’applet.
I/O
Input
Output - 1
Output - 2
Descrizione
Inserimento di un numero p da testare
Se il numero inserito è primo, ritorna: “p è primo.”
Se il numero inserito non è primo, ritorna: “p non
è primo.”
Tabella 4: Comportamento Lucas - Lehmer
Figura 7: Verifica della primalità tramite il test di Lucas - Lehmer
13 Descrizione del progetto
13.5
25
Verifica della primalità tramite teorema di Wilson
Tramite l’algoritmo di Wilson, è possibile verificare la primalità di un numero.
In Figura 8 a Pagina 25 viene mostrata l’applet, mentre nella Tabella 5 a Pagina
25, viene formalizzato il comportamento dell’applet.
I/O
Input
Output - 1
Output - 2
Descrizione
Inserimento di un numero n da testare minore di
50000
Se il numero inserito è primo, ritorna: “Il numero
n è primo secondo il teorema di Wilson.”
Se il numero inserito non è primo, ritorna: “Il
numero n non è primo secondo il teorema di
Wilson.”
Tabella 5: Comportamento Wilson
Figura 8: Verifica della primalità tramite il teorema di Wilson
13 Descrizione del progetto
13.6
26
Verifica della primalità tramite teorema di SolovayStrassen
Tramite l’algoritmo di Solovay-Strassen, è possibile verificare la primalità di un
numero.
In Figura 9 a Pagina 26 viene mostrata l’applet, mentre nella Tabella 6 a Pagina
26, viene formalizzato il comportamento dell’applet.
I/O
Input
Output - 1
Output - 2
Descrizione
Inserimento di un numero n da testare minore di
50000
Se il numero inserito è primo, ritorna: “n è un
numero primo con probabilità superiore al 50%.”
Se il numero inserito non è primo, ritorna: “Il
numero è pari, per cui non è primo.”
Tabella 6: Comportamento Solovay-Strassen
Figura 9: Verifica della primalità tramite Solovay-Strassen
13 Descrizione del progetto
13.7
27
Test di primalità di Miller-Rabin
Tramite l’algoritmo di Miller-Rabin, è possibile verificare la primalità di un numero.
In Figura 10 a Pagina 27 viene mostrata l’applet, mentre nella Tabella 7 a Pagina
27, viene formalizzato il comportamento dell’applet.
I/O
Input
Output - 1
Output - 2
Descrizione
Numero da testare n
Parametro di certezza n
Se il numero inserito è primo, ritorna: “Il numero
n è primo.”, “Parametro di certezza: 98.4375%”
Se il numero inserito non è primo, ritorna: “Il Numero n=4 non è primo! Parametro di certezza:
100%”
Tabella 7: Comportamento Miller-Rabin
Figura 10: Verifica della primalità tramite Miller-Rabin
13 Descrizione del progetto
13.8
28
Calcolo dei Numeri di Fermat
Tramite l’algoritmo di calcolo dei numeri primi di fermat, è possibile trovare l’iesimo numero di Fermat.
In Figura 11 a Pagina 28 viene mostrata l’applet, mentre nella Tabella 8 a Pagina
28, viene formalizzato il comportamento dell’applet.
I/O
Input
Output - 1
Descrizione
Inserimento di un numero n da testare minore di
19 per motivi computazionali
Il n◦ numero di Fermat è: . . .
Tabella 8: Comportamento Numeri di Fermat
Figura 11: Numeri di Fermat
13 Descrizione del progetto
13.9
29
Calcolo dei Numeri di Mersenne
Tramite l’algoritmo di calcolo dei numeri primi di Mersenne, è possibile trovare
l’i-esimo numero di Mersenne.
In Figura 12 a Pagina 29 viene mostrata l’applet, mentre nella Tabella 9 a Pagina
29, viene formalizzato il comportamento dell’applet.
I/O
Input
Output - 1
Descrizione
Inserimento di un numero n da testare minore di
500000 per motivi computazionali
Il n◦ numero di Mersenne è: . . .
Tabella 9: Comportamento Numeri di Mersenne
Figura 12: Numeri di Mersenne
13 Descrizione del progetto
13.10
30
Progressioni di numeri primi
In Figura 13 a Pagina 30 viene mostrata l’applet, mentre nella Tabella 10 a Pagina
30, viene formalizzato il comportamento dell’applet.
I/O
Input
Output - 1
Descrizione
Numero di partenza (3)
Distanza (2)
Numero di elementi della sequenza (3)
Passi minimi da compiere (10)
Sequenza trovata: 3, 5, 7.
Tabella 10: Progressioni numeri primi
Figura 13: Progressioni numeri primi
13 Descrizione del progetto
13.11
31
Numeri primi Sexy
In Figura 14 a Pagina 31 viene mostrata l’applet, mentre nella Tabella 11 a Pagina
31, viene formalizzato il comportamento dell’applet.
I/O
Input
Output - 1
Output - 2
Descrizione
Inserimento di un numero n (5)
Sequenza sexy di n è: 5, 11, 17, 23, 29.
Il numero n non è sexy! (n = 2)
Tabella 11: Numeri primi Sexy
Figura 14: Numeri primi Sexy
13 Descrizione del progetto
13.12
32
Numeri primi Fattoriali
In Figura 15 a Pagina 32 viene mostrata l’applet, mentre nella Tabella 12 a Pagina
32, viene formalizzato il comportamento dell’applet.
I/O
Input
Output - 1
Descrizione
Inserimento di un numero n minori di 1000 (4)
n! - 1 = 95; n! + 1 = 97
Tabella 12: Numeri primi Fattoriali
Figura 15: Numeri primi Fattoriali
13 Descrizione del progetto
13.13
33
Numeri primi Buoni
In Figura 16 a Pagina 33 viene mostrata l’applet, mentre nella Tabella 13 a Pagina
33, viene formalizzato il comportamento dell’applet.
I/O
Input
Output - 1
Output - 2
Descrizione
Inserimento di un numero n (3)
Ecco i numeri primi buoni compresi tra p(1) =
2 e p(3) = (5). 5.
Non è stato trovato alcun primo buono.
Tabella 13: Numeri primi Buoni
Figura 16: Numeri primi Buoni
Riferimenti bibliografici
34
Riferimenti bibliografici
[1] David Wells, Prime Numbers, The Most Mysterious Figures in Math, John
Wiley & Sons, Inc. 2005
[2] Massari Rossignoli Andrea, Mat.: 631419, Progetto di Matematica del Discreto
Numeri primi e Test di Primalità
[3] Andrew Granville, It is easy to determine whether a given integer is prime,
AMERICAN MATHEMATICAL SOCIETY, Volume 42, Number 1, Pages 338, 2004
[4] Alessandro Languasco & Alessandro Zaccagnini, Alcune proprietà dei numeri
primi I, 2005
http://matematica.unibocconi.it/ Data accesso 23.08.2006
[5] Alessandro Languasco & Alessandro Zaccagnini, Alcune proprietà dei numeri
primi II, 2005
http://matematica.unibocconi.it/ Data accesso 23.08.2006
[6] René Schoof, Four primality testing algorithms, 2004
[7] http://mathworld.wolfram.com/ Data accesso 20.08.2006
[8] http://it.wikipedia.org Data accesso 30.06.2006
[9] http://www.mersenne.org/ Data accesso 25.08.2006
[10] http://www.cut-the-knot.org Data accesso 23.08.2006
[11] http://primes.utm.edu/ Data accesso 15.06.2006
[12] http://mathworld.wolfram.com/Rabin-MillerStrongPseudoprimeTest.
html Data accesso 01.07.2006
[13] http://www.dti.unimi.it/~citrini/MD.htm Data accesso 20.06.2006
[14] http://cryptomathic.dk/labs/rabinprimalitytest.html Data accesso
01.07.2006
[15] http://en.wikipedia.org/wiki/AKS_primality_test
03.07.2006
Data
accesso
[16] http://algos.inesc.pt/algos/reading/20030411.pdf
03.07.2006
Data
accesso
[17] http://www.nist.gov/dads/ Data accesso 01.07.2006
[18] http://www.dti.unimi.it/~citrini/MD/%5BTEST%20PRIMALITA’%5D/
Intro%20(Test%20Primalit%E0).html Data accesso 20.06.2006
Indice analitico
A
AKS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . 14
applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Aritmetica . . . . . . . . . . . . . . . . . . . . . . . . . . 6
aritmia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
autorizzata . . . . . . . . . . . . . . . . . . . . . . . . 17
B
banale . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
base dieci . . . . . . . . . . . . . . . . . . . . . . . . . .
binario . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Boone . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
buono . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C
calcolatori . . . . . . . . . . . . . . . . . . . . . . . . .
campo finito . . . . . . . . . . . . . . . . . . . . . . .
casuale . . . . . . . . . . . . . . . . . . . . . . . . . . . .
chiavi . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
codice . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
composto . . . . . . . . . . . . . . . . . . . . . . . . . .
computer . . . . . . . . . . . . . . . . . . . . . . . . . .
confidenza . . . . . . . . . . . . . . . . . . . . . . . . .
congettura . . . . . . . . . . . . . . . . . . . . . . . . .
consumatori . . . . . . . . . . . . . . . . . . . . . . .
Content Scramble System . . . . . . . . .
Cooper . . . . . . . . . . . . . . . . . . . . . . . . . . . .
crittografia . . . . . . . . . . . . . . . . . . . . . . . .
crittosistema RSA . . . . . . . . . . . . . . . . .
19
10
11
10
17
DVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
E
Eratostene . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Erdös . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
errori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
esadecimale . . . . . . . . . . . . . . . . . . . . . . . . 18
Euclide . . . . . . . . . . . . . . . . . . . . . . . . . 5, 10
Eulero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
F
fattorizzazione . . . . . . . . . . . . . . . . . . . . . 19
Fermat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
funzione . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
G
10 GIMPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
15 giudici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
14 grado di probabilità . . . . . . . . . . . . . . . 15
19
H
17
HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
14
17 I
16 illegale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
10 immaginaria . . . . . . . . . . . . . . . . . . . . . . . 19
18 Implementazione . . . . . . . . . . . . . . . . . . 20
17 infinita . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
10 infiniti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
19 interi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
14 internet . . . . . . . . . . . . . . . . . . . . . . . . 17, 20
intervallo . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
D
decifrare . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
DeCSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
dimostrazione . . . . . . . . . . . . . . . . . . . . . . . 5
diritto d’autore . . . . . . . . . . . . . . . . . . . . 17
dispari . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
distribuzione . . . . . . . . . . . . . . . . . . . . . . 19
divisibile . . . . . . . . . . . . . . . . . . . . . . . . . . 15
divisore . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
DMCA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
K
Kayal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
L
leggi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Lehmer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Lenstra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
logica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Indice analitico
36
Lucas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 unità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Università del Missouri . . . . . . . . . . . . 10
M
M2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Z
matematica . . . . . . . . . . . . . . . . . . . . . . . . 17 zeta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Mersenne . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Miller-Rabin . . . . . . . . . . . . . . . . . . . 14, 15
Mn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
N
naturale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
numeri perfetti . . . . . . . . . . . . . . . . . . . . 10
numeri primi . . . . . . . . . . . . . . . . . . . . . . . 9
P
pari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
phi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Phil Carmody . . . . . . . . . . . . . . . . . . . . . 17
piccolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Pomerance . . . . . . . . . . . . . . . . . . . . . . . . . 6
probabilistico . . . . . . . . . . . . . . . . . . . . . . 14
probabilmente è primo . . . . . . . . . . . . . 14
progetto . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
protezioni . . . . . . . . . . . . . . . . . . . . . . . . . 17
R
reale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
resto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Riemann . . . . . . . . . . . . . . . . . . . . . . . . . . 19
ritorna . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
S
Saxena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
scoperta . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Sexy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
software . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Solovay-Strassen . . . . . . . . . . . . . . . . . . . 14
Strauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
T
test di primalità . . . . . . . . . . . . . . . 10, 14
U