Teoria dei numeri
Lezione del giorno 20 maggio 2009
Algoritmo di fattorizzazione di Pollard.
Proseguendo con le considerazioni che porteranno all’algoritmo di fattorizzazione di Pollard, ricordiamo che, dato il numero naturale n>1 da fattorizzare (supponendo n non primo), dato un suo divisore primo p
n(non conosciuto a priori), considerati gli insiemi:
S={0,1,2,…,p-1} T={0,1,2,…,n-1}S
e una funzione F: T T che soddisfa: F(xmodp)=F(x)modp per ogni xT, costruita la successione {a
k} di elementi di T (con k=0,1,2,….):
a
0=s; a
k=F(a
k-1) per ogni k>0 (dove sT è un “seme” fissato) e in corrispondenza la successione {b
k} di elementi di S:
b
k=a
kmodp
e supponendo che gli elementi di S siano distribuiti in modo uniforme (dal punto di vista probabilistico) nella successione b
k, se k è il minimo indice tale che b
j=b
kper un opportuno j<k (tale k è di ordine O(
p)), comunque presi due indici i,rj, se ir (mod k-j) si ha b
i=b
r.
Relativamente agli indici j, k indicati sopra, si ha allora:
b
j=a
jmodp=b
k=a
kmodp a
ja
k(mod p)
e comunque dati gli indici i,rj con ir (mod k-j):
b
i=a
imodp=b
r=a
rmodp a
ia
r(mod p)
In particolare allora p è divisore comune di n e del valore assoluto della differenza ½a
j-a
kê.
Tale differenza è in ogni caso <n (perché a
j, a
ksono compresi fra 0,1,…..,n-1 essendo elementi di T).
Se tale differenza a
j-a
kè 0 (cioè se a
j=a
k) non abbiamo alcuna informazione.
Ma se ½a
j-a
kê>0, si ha che p è divisore di ½a
j-a
kê e di n, dunque p è divisore del mcd(½a
j-a
kê,n)=d, e dunque lo stesso d è un divisore di n con d>1 (perché p divide d) e con d<n (perché d è divisore di
½a
j-a
kê<n): abbiamo in tale caso risolto il problema di fattorizzare n, trovando un suo divisore non banale d e potendo fattorizzare n come prodotto di n per n/d.
Se conoscessimo i valori degli indici j,k, potremmo dunque implementare un algoritmo in cui:
- scegliamo un seme casuale sT (quindi con 0sn-1) - calcoliamo i numeri a
j, a
k- se a
j=a
kallora l’algoritmo fallisce, e si può tornare alla scelta casuale del seme s, modificando tale scelta, e reiterando l’algoritmo
- se invece a
ja
kcalcolando mcd(½a
j-a
kê,n)=d otteniamo un divisore non banale di n.
Però, come già detto, non conosciamo j,k, perché dovremmo conoscere i termini della successione b
i=a
imodp (e quindi conoscere p).
Possiamo però implementare egualmente l’algoritmo facendo variare in tutti i modi possibili le coppie di indici i,r con 0i<r, e per ogni coppia studiare i valori a
i, a
rnel modo sopra indicato, con l’aspettativa di arrivare alla coppia corretta i=j, r=k in un numero di passi dello stesso ordine di grandezza O(
p2) cioè di ordine O(p) (perché si tratta di coppie di numeri k che è di ordine O(
p
)).
Ma essendo p
n, l’algoritmo avrebbe una complessità O(
n) non migliore di quella di altri algoritmi (per esempio di quello “ingenuo” che ricerca di un divisore non banale di non superiore a
n