Teoria dei numeri Lezione del giorno 18 maggio 2009 Algoritmo di fattorizzazione di Pollard. Premettiamo alcune considerazioni su un argomento di Calcolo delle Probabilità. Siano n,m numeri naturali con 1<n<m, S un insieme finito di cardinalità m e sia data una successione finita di n termini scelti in S (anche non distinti): a1, a2, ……, an in modo che gli ai siano scelti random in modo “uniforme” (dal punto di vista della probabilità) fra gli elementi di S (nel senso che per ogni indice i, ogni elemento dell’insieme S ha la stessa probabilità di essere scelto come elemento ai). Calcoliamo la probabilità che almeno 2 degli elementi della successione coincidano. Calcoliamo dapprima la probabilità che tutti gli elementi della successione siano distinti. Fissato a1, la probabilità che a2 sia diverso da a1 è (m-1)/m; fissati a1,a2 distinti, la probabilità che a3 sia diverso da a1 e da a2 è (m-2)/m , quindi la probabilità che a1, a2, a3 siano tutti distinti è il prodotto [(m-1)/m][(m-2)/m]=(1-1/m)(1-2/m) Iterando il ragionamento si ottiene che la probabilità che a1, a2, ….., an siano tutti distinti è il prodotto: (1-1/m)(1-2/m)……(1-(n-1)/m). Dallo sviluppo in serie ex=1+x+x2/2!+…, possiamo approssimare 1+x con la funzione ex, di modo che ogni fattore del prodotto precedente è approssimato (ponendo x= -i/m con i=1,….,n-1) dalla n ( n -1) 2m funzione e-i/m. Dunque il prodotto è approssimato dalla funzione e (tenendo conto che la soma 1+2+….+(n-1) coincide con n(n-1)/2): per n “grande” possiamo approssimare n(n-1) con n2, di modo che la probabilità che tutti gli elementi della successione siano distinti è approssimata dalla n2 2m e dunque la probabilità che almeno 2 degli elementi a1, a2, ….., an coincidano è funzione e (con approssimazione) la seguente funzione di n,m: p(n,m) 1 e n2 2m Se allora fissiamo un valore di probabilità p con 0<p<1, il numero n degli elementi di una successione per i quali sia p la probabilità che fra essi almeno 2 coincidano è approssimativamente: 1 )] n 2m[log e ( 1 p In particolare per esempio se fissiamo una probabilità del 50% (p=0.5), si ottiene n 1,77 m , mentre se se fissiamo una probabilità del 90% (p=0.9), si ottiene n 2,14 m . Dunque se scegliamo in successione in modo “random” elementi dell’insieme S: a1, a2, a3, ……………….. il minimo indice n per cui l’elemento an coincide con almeno uno degli elementi che lo precedono è, dal punto di vista probabilistico, di ordine O( m ). Un’applicazione di tale teoria é appunto il cosiddetto “paradosso dei compleanni”: se sono scelte random un numero n di persone con 1<n<365, la probabilità che almeno 2 fra esse compiano gli anni nello stesso giorno e mese dell’anno è 1 e n2 730 ; inoltre, fissato un valore di probabilità p con 0<p<1, il numero n di persone (scelte random) per le quali la probabilità che fra esse almeno 2 1 )] compiano gli anni nello stesso giorno e mese dell’anno è 730[log e ( 1 p (tutto questo supponendo che giorno e mese di nascita degli esseri umani siano distribuiti in modo uniforme fra i 365 giorni dell’anno, il che non è vero in pratica). Per esempio se la probabilità fissata è del 50% (p=0,5), n 730[log e 2 ] 23: scegliendo 23 persone in modo random, la probabilità che fra esse almeno 2 compiano gli anni nello stesso giorno e mese dell’anno è 50% (abbastanza paradossale…..). Scegliendo invece 50 persone in modo random, la probabilità che almeno 2 fra esse compiano gli anni nello stesso giorno e mese dell’anno è addirittura 97%. Introduciamo ora l’ Algoritmo di fattorizzazione di Pollard. Tale algoritmo (1975) ha avuto il suo più grande successo nel 1980, quando ha permesso di 8 calcolare la fattorizzazione del numero di Fermat F8= 2(2 ) +1 (di cui con il test di Pepin si era già dimostrata la non primalità), trovando un fattore (primo) di 16 cifre, con un cofattore di 62 cifre (che nel 1981 è stato dimostrato primo anch’esso). Il metodo di Pollard si basa sulle seguenti considerazioni. Supponiamo di volere fattorizzare un numero intero n>1, cercando un divisore non banale di n (se esiste, cioè se n non è primo). Sappiamo che n ha certamente un divisore primo p n , e formalmente (pur non conoscendo p a priori) consideriamo gli insiemi: S={0,1,2,…,p-1} T={0,1,2,…,n-1}S Sia poi F: T T una funzione che soddisfa: F(xmodp)=F(x)modp per ogni xT. Fissato un elemento sT (seme), costruiamo una successione ak di elementi di T (con k=0,1,2,….) ponendo induttivamente: a0=s; ak=F(ak-1) per ogni k>0 (in pratica a partire dal seme s, si applica successivamente più volte F per ottenere i termini seguenti) In corrispondenza (utilizzando le riduzioni modulo p) possiamo costruire una successione bk di elementi di S ponendo bk=akmodp . Ora supponiamo che gli elementi di S siano distribuiti in modo uniforme (dal punto di vista probabilistico) nella successione bk (cioè che per ogni k la probabilità che un elemento di S coincida con bk sia uguale per tutti gli elementi). Per le considerazioni svolte in precedenza (paradosso dei compleanni), il minimo indice k per cui b k coincide con uno dei termini che lo precedono (bj=bk con j<k) è dal punto di vista probabilistico di ordine O(S2)=O(p2). Se bj=bk con j<k, allora bj+1=bk+1 (perché bj+1=aj+1modp=F(aj)modp=F(ajmodp)=F(bj)= F(bk)=bj+1); analogamente si ha bj+2=bk+2 e in generale (per induzione): bj+m=bk+m per ogni m0 (*) Se fissiamo un qualunque indice ij si ha allora, applicando la (*) con m=i-j): bi=bj+(i-j)=bk+(i-j)=bi+(k-j) Analogamente si ha bi= bi+2(k-j) e in generale (per induzione): bi =bi+t(k-j) per ogni t0 (fissato l’indice ij) Poiché i+t(k-j) rappresenta il generico indice ri che sia congruo i modulo (k-j) otteniamo il seguente risultato: comunque presi due indici i,rj, se ir (mod k-j) allora bi=br . In pratica la successione bi diventa ciclica con “periodo” k-j, nel senso che dal termine di indice j in poi i termini coincidono ogni k-j posizioni. Per esempio se j=3, k=9, la successione diventa ciclica con periodo 6 dal termine di indice 3 in poi: infatti dall’indice j=3 in poi, due qualunque termini della successione, i cui indici differiscano per un multiplo di k-j=6 (cioè i cui indici siano congrui modulo 6), coincidono fra loro. Rappresentando graficamente la situazione, si ottiene (per j=3, k=9): b5=b11=b17=…. b4=b10=b16=…. b6=b12=b18=…. b7=b13=b19=…. b3 b2 b8=b14=b20=…. b1 b0 Notare la forma geometrica che richiama la struttura della lettera greca (da cui il nome dell’algoritmo).