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