• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Crivello quadratico alla Fermat
 

Crivello quadratico alla Fermat

on

  • 693 views

 

Statistics

Views

Total Views
693
Views on SlideShare
693
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Crivello quadratico alla Fermat Crivello quadratico alla Fermat Document Transcript

    • 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) 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:
    • 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).
    • 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);