Crivello quadratico alla Fermat

706 views

Published on

Published in: Education
  • Be the first to comment

  • Be the first to like this

Crivello quadratico alla Fermat

  1. 1. Relazione tra le terne pitagoriche e la fattorizzazione alla Fermat e ulteriori applicazioni: crivello quadratico Di Cristiano Armellini (cristiano.armellini@alice.it)Sappiamo che l’identità algebrica 2 ci fornisce al variare di a, b interitutte le terne pitagoriche (non solo quelle fondamentali). Se poniamo , allora otteniamofacilmente 4 = che è ancora un’identità algebrica. Se , ,allora arriviamo alla relazione che lega la somma con la differenza tra due numeri ( valida anche se p, qsono numeri primi): . Questa relazione è particolarmente importante perché anzituttodimostra la proprietà √ 4 , 2√ , 2√ , √ 4 . Inoltre ci conduce allafattorizzazione alla , Fermat: , cioè che ogni numero intero si può sempre esprimere comela differenza del quadrato di due numeri interi.. D’altra parte la relazione è piuttosto banalee facile da provare perché 4 . Ha però importanti conseguenze (in parte già visteprima). Queste considerazioni ci suggeriscono un interessante algoritmo di fattorizzazione più veloce diquello di Fermat: 1) Sia dato n, numero da fattorizzare, calcoliamo 4n
  2. 2. 2) Andiamo a vedere, ad esempio tramite tavole numeriche o con altre tecniche, qual è il quadrato perfetto più vicino a 4n e maggiore di 4n, che chiamiamo ,( 4 , √ 3) Se 4 è un quadrato perfetto: allora abbiamo finito: , 4 4) Altrimenti dobbiamo cercare un altro quadrato con 4 , e tornare al punto 3)In alternativa si può cercare , dato n, quel minimo numero intero d tale che (quadratoperfetto). La velocità del sistema dipende dalla velocità con la quale siano in grado di raggiungere i quadratiperfetti (numeri interi) maggiori di un numero intero prefissato. Su questo aspetto della matematica sonostate sviluppate tecniche molto raffinate. Nel caso particolare delle fattorizzazione dei numeri RSA s, ddevono essere pari perché somma o differenza di due numeri primi, quindi 2 , 2 .Esempi di tecniche di calcolo dei quadrati:caso dei numeri interi (pari o dispari)numeri interi 2 3 4 5 6 7 8 9 10quadrati 4 9 16 25 36 49 64 81 100Scarto (lista deidispari) 5 7 9 11 13 15 17 194 = 2*2, 9 = 3*3 = 4+5; 16=4*4 = 9+7; 25=5*5 = 16+9 , ecc..Con lo stesso ragionamento del caso precedente abbiamo:
  3. 3. Caso dei numeri pari (16=4+12; 36=16+20;64=36+28; …;196=144+52)numeri pari 2 4 6 8 10 12 14quadrati 4 16 36 64 100 144 196Scarto (multipli dispari di 4) 12=4*3 20=5*4 28=7*4 36=4*9 44=4*11 52=4*13Trovati i quadrati, dato 4n vado a vedere i quadrati maggiori di 4n: ogni quadrato della lista lo sottraggo a4n e verifico se è un quadrato: se lo è ho finito . altrimenti passo al quadrato successivo eripeto l’algoritmo.Caso dei numeri dispari (25=9+16; 49=25+24;…..; 121=81+40)numeri dispari 3 5 7 9 11quadrati 9 25 49 81 121Scarto (multipli pari di 4) 16=4*4 24=4*6 32=4*8 40=4*10Notiamo che se conosciamo e conosciamo i fattori di n: , x = p, q √ 4 2La relazione equivale a dire che . : infatti | cioè n|4n. Questarelazione sta alla base di numerosi metodi di fattorizzazione veloce. /Normalmente nei problemi RSA si stima che 2√ e 10 , ove con dim(n) indichiamola dimensione di n (esempio se n = 1000, dim(n) = 4).
  4. 4. Implementazione in Pythonimport math;def fattore(n): i = 1; M = 2*math.floor(math.sqrt(n)); s = M*M + 4*(M+1); M = M+1; x = (math.sqrt(s)+math.sqrt(s-4*n))/2.; while((n/x)!= math.floor(n/x)): M = M+2; s = s+4*M; i = i+1; x = (math.sqrt(s)+math.sqrt(s-4*n))/2.; print(x); print(n/x); print(i);import math;def fattore(n): i = 1; M = 2*math.floor(math.sqrt(n)); s = M*M + 4*(M+1); M = M+1; while(math.sqrt(s-4*n)!= math.floor(math.sqrt(s-4*n))): M = M+2; s = s+4*M; i = i+1; x = (math.sqrt(s)+math.sqrt(s-4*n))/2.; print(x); print(n/x); print(i);

×