La Fattorizzazione degli interi con i numeri di Fibonacci

La Fattorizzazione degli interi con i numeri di Fibonacci
Di Cristiano Armellini ([email protected])
La successione di Fibonacci (forse una delle successioni numeriche più famose) è quella per cui a partire dai
valori 0, 1 si ottiene il successivo termine sommando i due precedenti:
F(0) = 0, F(1) = 1, F(n) = F(n-1)+F(n-2) per n = 2, 3, 4, 5…..
Ovvero F(n+2)-F(n+1)-F(n)=0
E’ facilmente dimostrabile che l’ennesimo numero della serie di Fibonacci è rappresentato dalla formula:
1
1 √5
1 √5
2
2
√5
Ci sono molte proprietà che legano i numeri di Fibonacci con i numeri primi:
1) La successione di Fibonacci contiene infiniti numeri primi (congettura non dimostrata)
2) Ogni primo è un fattore di qualche numero di Fibonacci
In particolare la proprietà 2) ci suggerisce un metodo per impiegare i numeri di Fibonacci nella
fattorizzazione dei numeri interi.
ALGORITMO :
Supponiamo che n = pq con p, q primi. L’idea è di calcolare per ogni numero di Fibonacci j il MCD(n, j): se il
MCD(n, j) non è l’unità allora deve essere necessariamente uno tra i fattori p, q del numero n.
Usando il PARI/GP possiamo scrivere il codice:
{fact(p) =
n = 2;
k = fibonacci(n);
while (gcd(p, k) == 1, n = n+1 ;k =fibonacci(n) );
g = gcd(p, k);
print(g);}
Dove il GCD (massimo comun divisore) e “Fibonacci” sono funzioni predefinite gia presenti nel programma
PARI/GP
Volendo possiamo scrivere il codice anche per il Massimo comun divisore e per i numeri di Fibonacci.
In C una possibile versione è:
long Fibonacci (long n){
if (n ==0) return 0;
else
if (n ==1) return 1;
else return Fibonacci(n-1)+ Fibonacci(n-2);
}
long MCD(long a, long b) {
if (a==b) return a;
else
if (a > b) return MCD(a-b, b);
else (a< b) return MCD(b, a);
}
Naturalmente esistono anche altre implementazioni.
Per numeri grandi da fattorizzare possiamo sempre partire nella successione di Fibonacci non da n = 2 ma
da n = k dove k è un numero abbastanza elevato.