Your SlideShare is downloading. ×
Prodotti notevoli-fattorizzazione
Prodotti notevoli-fattorizzazione
Prodotti notevoli-fattorizzazione
Prodotti notevoli-fattorizzazione
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Prodotti notevoli-fattorizzazione

860

Published on

algoritmi di fattorizzazione basati sull'algebra

algoritmi di fattorizzazione basati sull'algebra

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
860
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Algoritmi di fattorizzazione basati sui prodotti notevoli Di Cristiano Armellini (cristiano.armellini@alice.it )Supponiamo di voler trovare i fattori del numero p = xy dove assumiamo che p sia un numero dispari (sefosse pari per quanto grande sarebbe facilmente individuabile perché terminerebbe con 0, 2, 4, 6 oppure8). Partiamo dal seguente prodotto notevole: 2Se , , (k è la somma dei quadrati dei due numeri primi x, y) otteniamo: 2 0. Questo ci porta a considerare che: s 2p kSappiamo che vale sempre l’equazione 0 e quindi 2 (per l’esistenza delle radici).Ciò implica che k > 2p inoltre deve essere un numero pari perché somma di due quadrati di due numeriprimi, quindi dispari. Detto ciò faremo variare k>2p e pari fino a quando non troviamo un valore interopositivo per s e a quel punto sapendo il valore di s e di calcoliamo i fattori tramite la formula: 4 , 2(ovviamente dovremo accettare i valori di s intero per cui anche x, y siano interi)Sviluppiamo un programma in C*++ che descrive l’algoritmo proposto:
  • 2. #include <iostream>#include <stdlib.h>#include <math.h>using namespace std;int main(int argc, char *argv[]){double p, s, k, x, y;long i = 0;cout << "inserisci il numero da fattorizzare ";cin >> p;k = 2*p;do{s = sqrt(2*p+k);k = k+2;i = i+1;x = (s+sqrt(pow(s,2)-4*p))/2;y = (s-sqrt(pow(s,2)-4*p))/2;} while (s != int(s) or int(x) != x);cout << x << "n";cout << y << "n";cout << "passi";cout << i <<"n"; system("PAUSE"); return 0;}L’altro prodotto notevole che consideriamo è: 2Ovvero ponendo: , , ho che 2 quindi 2 per l’esistenzadelle radici.Trovato d e conoscendo p ho che: , ho che 0 ovvero 4 2Oppure 0 da cui 4 2Quindi come sopra cercheremo un valore di k per cui d è intero e lo sono anche x,y
  • 3. Sviluppiamo la solita applicazione in C++#include <iostream>#include <stdlib.h>#include <math.h>using namespace std;int main(int argc, char *argv[]){double p, s, k, x, y, d;long i = 0;cout << "inserisci il numero da fattorizzare ";cin >> p;k = int(sqrt(2*p));do{d = sqrt(k-2*p);k = k+1;i = i+1;y = (-d+sqrt(pow(d,2)+4*p))/2;} while (d != int(d) or y != int(y));cout << y << "n";cout << p/y << "n";cout << "passi";cout << i <<"n"; system("PAUSE"); return 0;}Ovviamente per grandi numeri interi si consiglia di riscrivere il codice usando il PARI/GP o il Python chepossono gestire meglio numeri grandi.Come penultimo caso consideriamo il seguente prodotto notevole: 4 2Ove ponendo come al solito , ,
  • 4. Otteniamo 4 2 0 che è un’equazione biquadratica nella variabile s. Ha come soluzioni 2 2 e per l’esistenza della radice con il degno (-) deve essere k pari e 2 2 ,mentre per l’altra basta che 2 . Trovato s da 0 troviamo x, yL’applicazione in C++ è del tutto simile alle altre sopra descritte.Infine consideriamo l’ultimo prodotto notevole: 3Anche qui possiamo porre , , quindi: 3 0Che però è un’equazione di II grado (difficile da risolvere ma possibile ancora per radicali)Come pure se 3 Ponendo , , ho che 3 0

×