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