Teoria dei numeri e Crittografia: lezione del 12 dicembre 2011 Numeri perfetti. Un numero naturale n>1 è detto perfetto se n coincide con la somma dei suoi divisori <n. Per esempio n=6 è perfetto in quanto 6=1+2+3; n=8 non è perfetto in quanto 81+2+4. Se per ogni naturale n>1 definiamo la funzione (n) uguale alla somma di tutti i divisori di n (incluso n), si ha che un naturale n>1 è perfetto se e solo se (n)=2n. Se n è un naturale >1, e se la fattorizzazione di n in prodotto di potenze di primi distinti è: n= p1k1 p2 k2 .... pr kr (pi primi distinti, ki >0) allora (per la fattorizzazione unica) ogni divisore d di n ha la forma: d= p1h1 p2h2 .... pr hr con 0 hi ki per ogni i=1,….,r dunque si ha la seguente formula per il calcolo di (n): (n) = r i 1 0 hi ki p1h1 p2 h2 .... pr hr Teorema. Se n,m sono naturali >1 coprimi, si ha (nm)=(n)(m). Dimostrazione: Se le fattorizzazioni di n,m in prodotto di potenze di primi distinti sono rispettivamente: n= p1k1 p2 k2 .... pr kr m= pr 1kr 1 pr 2 kr 2 .... ps ks (i fattori primi di n sono distinti da quelli di m perché n, m sono coprimi) la fattorizzazione di nm in prodotto di potenze di primi distinti è: nm= p1k1 p2 k2 .... pr kr pr 1kr 1 pr 2 kr 2 .... ps ks e per la proprietà distributiva si ottiene: (n)(m)= ( r i 1 0 hi ki s p1h1 .... pr hr )( i r 1 0 hi ki s pr 1hr 1 .... ps hs ) = i 1 0 hi ki p1h1 p2 h2 .... pr hs =(nm). Vedremo che vi è uno stretto legame fra la teoria di numeri perfetti e quella dei numeri di Mersenne. Cominceremo con la dimostrazione del seguente risultato di Euclide: Teorema (Euclide). Se il numero di Mersenne Mk=2k-1 è primo (quindi con k necessariamente primo), il numero: n=2k-1(2k-1)=2kMk è perfetto (e ovviamente pari). Dimostrazione. Essendo Mk dispari, i numeri 2k-1, Mk sono coprimi, e per un risultato precedente si ha: (n)=(2k-1)(Mk). Essendo Mk primo si ha (Mk)=1+Mk=1+(2k-1)= 2k. I divisori di 2k-1 sono le potenze 20, 21, …., 2k-1, dunque (2k-1)= 20+21+22+….+2k-1=2k-1 (dove si è sfruttata l’identità (xk-yk)=(x-y)(xk-1+xk-2y+….+xyk-2+ yk-1) per x=2, y=1). In totale si ottiene (n)=2k(2k-1)=2[2k-1(2k-1)]=2n ed n è perfetto. Eulero dimostrò il viceversa: Teorema (Eulero). Se n è un numero naturale pari perfetto, allora n è della forma n=2k-1Mk dove Mk=2k-1 è un numero di Mersenne primo (quindi con k necessariamente primo). Dimostrazione: Poiché n è pari, se 2t (con t>0) è la massima potenza di 2 che divide n, si può scrivere n=2tm con m dispari. Poniamo k=t+1>1, in modo che n=2k-1m. Essendo m dispari, i numeri 2k-1, m sono coprimi, e dunque (n)=(2k-1)(m). Come nella dimostrazione del Teorema precedente si ha (2k-1)=2k-1. Poiché n è perfetto per ipotesi, si ottiene 2km=2n=(n)=(2k-1)(m)=(2k-1)(m). Dunque 2k-1 è divisore del prodotto 2km; ma 2k, 2k-1 sono coprimi (perché consecutivi), quindi 2k-1 è divisore del fattore m, e si ha m=(2k-1)M, con M naturale divisore di m. Sostituendo si ha: 2km=2k(2k-1)M=(2k-1)(m), da cui (m)=2kM. Si ha allora m+M=(2k-1)M+M=2kM=(m). Essendo m,M entrambi divisori di m, ed essendo (m) la somma di tutti i divisori di m, concludiamo che m,M sono gli unici divisori di m (e dunque necessariamente M=1), ossia m è primo ed inoltre: m=(2k-1)M=(2k-1)=Mk, ed n=2k-1m=2k-1Mk, come voleva la tesi. I Teoremi di Euclide ed Eulero dimostrati nell’ultima lezione hanno come conseguenza che, dato un numero naturale pari n, esso è perfetto se e solo se n=2k-1(2k-1)=2k-1Mk dove Mk è un numero di Mersenne primo. Dunque esiste una biiezione fra numeri perfetti pari e numeri di Mersenne primi: poiché si conoscono a tutt’oggi 46 numeri di Mersenne primi, si conoscono altrettanti numeri perfetti pari. Per esempio per k=2,3,5 si hanno i numeri di mersenne primi M2=3, M3=7, M5=31 e in corrispondenza i numeri perfetti 6, 28, 496. E’ invece ancora aperta la seguente congettura: esiste un numero perfetto dispari ? Il test di primalità AKS (cenni). E’ l’unico test di primalità deterministico di complessità polinomiale che si conosca a tutt’oggi. E’ stato implementato nel 2002 da tre matematici indiani: Agrawal, Kayal, Saxena. Osserviamo prima di tutto che: n se n è un numero primo, i coefficienti binomiali con 1 i n-1 sono tutti multipli di n. i n n(n 1).....(n i 1) n Infatti si ha = dunque i! = n(n-1)…..(n-i+1), ossia il numero primo n è i! i i n divisore del prodotto i! , e poiché n non è divisore di i! (che è prodotto di fattori <n, dunque non i n multipli di n), si ha che n è divisore di . i Su tale osservazione si basa un test di primalità deterministico che ora esporremo. Per esporre tale test definiremo il concetto di congruenza polinomiale. Fissiamo un polinomio h(x)Z[x] . Dati due polinomi f(x), g(x)Z[x] diremo che f(x) è congruo g(x) modulo h(x) se h(x)f(x)-g(x) cioè se esiste s(x)Z[x] tale che f(x)-g(x)=s(x)h(x). In tale caso scriveremo f(x) g(x) (mod h(x)). E’ facile verificare che tale relazione di congruenza fra polinomi è una relazione di equivalenza in Z[x], e che gode di proprietà simili a quelle della congruenza fra interi: essa è per esempio compatibile con somma e prodotto, quindi si possono moltiplicare e sommare congruenze fra polinomi. Un caso particolare si ha se il polinomio h(x) è un polinomio costante della forma h(x)=n con n>1. In questo caso è facile verificare che, se ai ,bi sono rispettivamente i coefficienti (dello stesso grado) di f(x), g(x) si ha f(x) g(x) (mod n) se e solo se ai bi (mod n) per ogni i, dunque la congruenza fra polinomi si riconduce in questo caso alle congruenze aritmetiche fra le coppie di coefficienti numerici dei polinomi. Teorema. Dato un numero naturale n>1, ed un qualunque naturale a coprimo con n , si ha: n è primo (x+a)n xn+a (mod n). Dimostrazione. () Sia n primo. Sviluppando con la regola di Newton si ha : n n (x+a)n = a i x n-i i 0 i Confrontando i coefficienti dei polinomi (x+a)n, xn+a (che hanno entrambi il coefficiente principale n =1) la tesi è che sia: ai 0 (mod n) per i=1,2,…,n-1; an a (mod n). i n La prima proprietà deriva dall’osservazione fatta sopra : è multiplo di n per i=1,2,…,n-1. i n Il fatto che a a (mod n) deriva dal piccolo teorema di Fermat an-1 1 (mod n), moltiplicando ambo i membri per a. () Per ipotesi sia (x+a)n xn+a (mod n), ossia: n i a 0 (mod n) per i=1,2,…,n-1; an a (mod n). i Supponiamo per assurdo che n non sia primo, e sia q un divisore primo di n, con 1<q<n; sia poi qk la massima potenza di q che divide n (con k>0). n n(n-1 ).....(n-q 1 ) Consideriamo il coefficiente binomiale = ; si ha: q! q n q! = n(n-1)…..(n-q+1). q n n L’ipotesi aq 0 (mod n) implica che qk è divisore del prodotto aq, ma q non divide aq q q (perché q non divide a, essendo a,n coprimi): dunque, per la fattorizzazione unica, qk è divisore di n . q n Essendo qq!, qkn si ha che qk+1 è divisore di q! = n(n-1)…..(n-q+1), dunque (essendo qk la q massima potenza di q che è divisore di n) per la fattorizzazione unica q é divisore di uno dei fattori (n-i) con 1 i q-1, contraddizione perché, essendo qn, si avrebbe qi con 1 i q-1. Nota: come si vede nella dimostrazione, nell’implicazione () si può omettere l’ipotesi che a,n siano coprimi, poiché la congruenza an a (mod n) è valida anche se a,n non sono coprimi (cioè se il primo n è divisore di a), in quanto ovviamente n sarà in questo caso anche divisore della differenza an-a . In base all’ultimo teorema si può allora implementare il seguente test di primalità, con input n >1: 1) si fissa a piacere un intero a, con 1 a n-1 2) se mcd(a,n)=d >1 allora si esce con output “n è composto” 3) se invece a,n sono coprimi: se (x+a)n xn+a (mod n) si esce con output “n è primo”, altrimenti si esce con output “n è composto” Dimostriamo che tale test è deterministico. Se l’input n è primo, nel passo 2) a,n sono coprimi (le essendo a<n) e nel passo 3) si esce con output “n è primo” per il Teorema precedente. Viceversa, se nell’algoritmo si esce con output “n è primo”, nel passo 2) si deve avere a,n coprimi, dunque nel passo 3) (visto l’output) la congruenza fra polinomi è verificata, ed n è primo per il Teorema precedente. Esaminiamo la complessità di calcolo dell’algoritmo. Sia x=L(n) la lunghezza binaria di n . Nel passo 2) si usa l’algoritmo euclideo delle divisioni successive, di complessità polinomiale. Nel passo 3) si deve verificare la congruenza polinomiale (x+a)n xn+a (mod n), la quale comporta la verifica delle congruenze dei singoli coefficienti dei 2 polinomi (x+a)n, xn+a : essi sono polinomi di grado n, e (a parte il coefficiente di grado massimo che è =1 in entrambi) si tratta di verificare n congruenze numeriche: n i a 0 (mod n) per i=1,2,…,n-1; an a (mod n) i ognuna di complessità polinomiale rispetto a x=L(n). Ma il numero di tali congruenze è n, quindi di ordine esponenziale O(2x), perciò l’algoritmo non è “efficiente”. L’idea di Agrawal, Kayal, Saxena per rendere “efficiente” il precedente test di primalità fu quella di sostituire i polinomi (x+a)n, xn+a , con polinomi di grado minore, e in particolare di grado che fosse di ordine polinomiale rispetto ad x=L(n): in tal modo verificare la congruenza polinomiale coinvolta nel passo 3) equivale a verificare un numero di congruenze aritmetiche di ordine polinomiale rispetto a x=L(n), e la complessità del test diventa globalmente polinomiale.