Sei sulla pagina 1di 2

SimpleGNFS

==========
Autore: Rosario Turco

Scaricare il pacchetto completo da:


https://drive.google.com/file/d/1Rq2Z46pUhlm8Rj-GyK7Rrz-5gVXKexbl/view?usp=sharing

SimpleGNFS è un framework didattico per apprenderenn il General


Number Field Sieve. E' stato scritto in PARI/GP.

Il GNFS è utile soprattutto per numeri interi enormi da fattorizzare


ben superiore di molte cifre di quello che vedremo
nell'esempio (45311).

Nel GNFS la filosofia è predisporre una configurazione, lanciarla e


attendere i risultati che possono essere di giorni o di mesi.

Nel seguito il nostro obiettivo è solo esamininare il metodo, ovviamente il sw in


PARI/GP
è ddidattico e non ottimizzato. Un programma GNFS serio è scritto in C/CMP ed ha
parti
parallelizzate in MPI (tipicamente il Sieving) e viene fatto girare su un quadcore
minimo e con molti giga di RAM.
SimpleGNFS, scritto in PARI GP, rispetto ad un GNFS in
C ha prestazioni peggiori.

In generale un GNFS lavora in almeno quattro fasi:

== SETUP:
- si configurano n, m e f e i limiti degli intervalli di R, A e Q.
- trova il fattore base razionale R, il attore base algebrico A e il
character quadratic base Q.

== SIEVING
- crea ls lista di sieving dette relazioni.

== ALGEBRA LINEARE:
- crea la matrice X (algebra lineare) delle possibili soluzioni

== GCD:
- trova il gcd (m.c.d.) sfruttando i quadrati

La documentazione usata per l'implementazione del framework:


1) A Beginner’s Guide To The General Number
Field Sieve - Michael Case - Oregon State University, ECE 575
case@engr.orst.edu
2)An Introduction to the General Number Field Sieve
Matthew E. Briggs
3) Integer Factorization
Per Leslie Jensen <pleslie@diku.dk>
Master Thesis
Department of Computer Science
University of Copenhagen Fall

Nel SETUP per ogni n da fattorizzare occorre configurare principalmente:


m, f(x).
Il resto se è da cambiare è suggerito dal programma stesso nella fase
di Setup. Dopo il lancio ci accorgiamo che le relazioni sono solo 3
Dobbiamo agire su R, sui limiti di R,A,Q,le volte di
A rispetto ad R e l'intervallo di Sieving (a1,a2,b1,b2).

Quindi dobbiamo giocare sulle variabili di seguito.


a1=-400;a2=400;
b1=1;b2=101;
dimR=10;
lim_pR=60;
lim_pA=90;
lim_pQ=107;
volte_AtoR=2;

La fase di setup richiede molto tempo e diversi lanci. Se n è grande il Sieving,


cioè la ricerca delle coppie smooth in R e A o relazioni,
richiede tempo. In base anche a quello che succede modificheremo il SetupGNFS.cfg

La scelta di A va fatta in base a quanto propone il programma, prendendo


il numero di elementi che dice il programma e cercando di avere tutti i
p proposti.

Esempio A 20 elementi adatto a n=45113


[ [0, 2], [6, 7], [13, 17], [11, 23], [26, 29], [18, 31], [19, 41], [13, 43], [1,
53], [46, 61],[2, 67], [6, 67], [44, 67], [50, 73], [23, 79], [47, 79], [73, 79],
[28, 89], [62, 89], [73, 89]];

Il numero di relazioni previsto è 1+length(R)+length(A)+length(Q)

Se non esce tale numero di relazioni dobbiamo ricominciare a modificare il setup.

I sorgenti devono stare tutti insieme in una directory. Il programma GNFS.gp


punta al path C:\GNFS, altrimenti va modificato.

Per l'help digitare


? GNFS