il metodo dei numeri periodici

Il metodo dei numeri periodici
Di Cristiano Armellini, [email protected]
Se n = pq allora detto T (n) il periodo della frazione 1 / n possiamo calcolare p, q
come p, q = MCD(n,10 a − 1) ≠ 1, a | T (n) ovvero per qualche a che divide il periodo di n.
Nell'usare questo metodo molto potente ci sono grossi problemi di approssimazione
perché calcolare con esattezza il periodo di 1 / n per n grande è difficilissimo.
Proponiamo alcuni listati di codice in Python e in PARI/GP che ci aiuteranno a capire il
meccanismo nel caso di n relativamente piccolo ( si consiglia di fare calcoli alla massima
precisione possibile):
Calcolo del periodo di 1/n (Python):
import math;
def periodo(n):
k = 0;
i = 0;
i = i+9*math.pow(10, k);
while ((i/n) != math.floor(i/n)):
k = k+1;
i = i+9*math.pow(10, k);
print(i);
print(i/n);
h = 0;
while (i/math.pow(10,h) > 1):
h = h+1;
print(h);
Calcolo del periodo (PARI/GP)
{periodo(n) =
local(k);
k = 0;
i = 0;
i = i+9*10^k;
while(i/n != floor(i/n), k = k+1;i = i+9*10^k);
h=0;
while(i/10^h > 1, h = h+1);
print(h);
}
Fattorizzazione (PARI/GP)
{facto(n) =
local(a);
a =1;
v=gcd(n, 10^a-1);
while (v == 1 ,a =a+1; v=gcd(n, 10^a-1));
print(v);
print(n/v);
return (1);}
Fattorizzazione (Python)
import math;
def mcd(a,b):
if b == 0:
return a;
else:
return mcd(b, a%b);
def fatto(n):
a = 1;
v = mcd(n, math.pow(10, a)-1);
while v == 1:
a = a+1;
v = mcd(n, math.pow(10, a)-1);
print (v);
print (n/v);
Esempio: n = 187, periodo(187) = 18 =9*2, MCD(187,10^2-1)= 11=MCD(187, 10^6-1)
La fattorizzazione: un punto critico
Supponiamo di considerare il problema della fattorizzazione RSA ovvero di scomporre il
numero n = pq nei due fattori p, q . Se q > p, p ≠ q allora possiamo scrivere per il
teorema del quoziente e resto q = ap + b . Quindi (ap + b) p = n , ovvero a =
Dato che vale la nota relazione p + q ≥ 2 n allora
n − p2
.
b
n − pb
p + b + p ≥ 2 n , che si
p2
traduce anche come p 2 ≥ 2 p n − n . Ovviamente deve essere 2 p n − n ≥ 0 , ovvero
p≥
n
2 n
=
n
, oppure 2 p n − n ≤ 0 (un numero positivo è sempre maggiore di un
2
numero negativo) quindi p ≤
n
. Ecco allora che i fattori p, q devono essere scelti in
2
modo tale da essere comunque molto lontani dal punto critico
n
.
2