Francesco Di Noto Anna
Rita Tulumello
(Gruppo Eratostene Caltanissetta)
TEOREMA N° 13:
È POSSIBILE FATTORIZZARE UN PRODOTTO N=p×q CON p E q PRIMI,
MA DIVERSI DA 2 E 3, SENZA USARE LA TAVOLA DEI NUMERI PRIMI,
IN MODO LINEARE, PIÙ SEMPLICE, E FORSE ANCHE PIÙ VELOCE
DIMOSTRAZIONE
In base al Teorema n° 1, tutti i numeri primi, (tranne il 2 e il 3), i loro prodotti e le loro potenze hanno la forma generale:
p; p×q; px = 6n±1
Un prodotto tra primi, quindi si configurerebbe in particolare con la forma:
N = p×q = (6a±1) (6b±1) con "a" e "b" interi.
Poiché anche i numeri primi sono della forma 6n±1, per fattorizzare N basta dividere N per tutti i valori di 6a±1 con "a" da 1 a
per ottenere q=(6b±1).
=(6b±1) |
nel caso in cui p=q, avremo un quadrato (6a±1)2
o una potenza: (6a±1)x
ma non lo sappiamo a priori, per cui dobbiamo applicare
la (1.2); che ci evita di memorizzare nel computer la lista dei numeri primi,
almeno fino a (ricordiamo
che, così come in una somma "a"+"b" uno dei due numeri è inferiore o al massimo
uguale a N/2, così in una prodotto "a×b" oppure nel nostro caso due primi
p×q, uno dei due numeri è minore o al massimo uguale a .
Per cui, per fattorizzare N, prima bastava dividere N per tutti i primi fino
a , mentre ora, con la
(1.2), basta dividere N per tutti i valori progressivi (6a±1) con "a"
fino /6+ 1, evitando
così di memorizzare nel computer la lista dei numeri primi, che sono compresi
automaticamente (tranne sempre il 2 e il 3) nella forma (6a±1).
Il numero delle divisioni possibili sarà un po' maggiore che col vecchio sistema;
ma, evitando la lista dei primi e programmando al loro posto la relazione 6a±1
con "a" da 5 (= 6×1-1) fino a
/6+ 1, il calcolo
elettronico potrebbe essere più veloce, usando tutti possibili valori della
relazione 6a-1; e se non si trova q, si ripetono le divisioni, con i valori
della relazione 6a+1.
Per esempio, per un numero N prossimo a N=104=10.000,
avremo ; con il vecchio
metodo dovremmo fare 22 divisioni, poiché fino a 100 ci sono 22 primi, escludendo
il 2 e il 3 (abbiamo posto N=p×q con p e q diversi da 2 e 3; il teorema
è finalizzato a semplificare la fattorizzazione di un numero di tipo RSA, usato
per le cifrature di messaggi usando come chiave un prodotto di due grandi numeri
primi, e quindi esclusi il 2 e il 3).
Con il nuovo metodo occorre invece fare 17 divisioni per la forma 6a-1 e 17
divisioni per la forma 6a+1 (poiché 100/6=16 multipli di 6, più 1 per maggiore
sicurezza=17, e 17×2=34 divisioni.
34 è un numero di divisioni maggiore di 22 dell'altro metodo, ma permette di
evitare la memorizzazione e l'uso diretto dei numeri primi; e il semplice calcolo
progressivo delle due forme 6a-1 e 6a+1, con "a" da 5 a /6+
1, potrebbe rendere ugualmente la fattorizzazione al computer di N molto più
veloce dei metodi di calcolo attuali; con i quali, con numeri RSA molto grandi
occorrerebbe più tempo; per esempio per fattorizzare RSA-129 (composto
da 129 cifre) sono occorsi ben 8 mesi a 1600 computer connessi in Internet;
ma un futuro computer quantistico, si prevede, impiegherebbe solo 8 secondi!).
ESEMPIO
N =10.001=73×137=(12×6+1)×(23×6-1)
P=73 è inferiore a =100
n=(10.001+1)/6=1667
a=(73-1)/6=12
b=(137-1)/6=23
N/P=10.001/73=(1667×6+1)/(12×6-1)=23×6-1=137=q
Con la fattorizzazione classica occorrevano 19
divisioni (73 è il 19° numero primo dopo il 2 e il 3).
Con la nuova fattorizzazione, ne occorrono divisioni 100/6=16 della forma 6a-1,
tra le quali non si trova q, e 12="a" divisioni della forma 6a+1; infatti alla
12ª divisione, per 6×12+1=73, si ha il risultato intero q=137, l'altro
fattore.
In totale, quindi, 16+12=28 divisioni anziché 19 della fattorizzazione classica,
ma si è evitato l'uso della tavola dei numeri primi, cosa che con i computer
avrebbe richiesto più tempo.
Si propone un confronto temporale tra i due calcoli, e un confronto tra i due
software, per N molto grandi.
Si presume un tempo minore e un software più semplice per il secondo metodo
descritto da questo Teorema n° 13.
Nota al Teorema n° 13
Con la (1.2) si trasformerebbe un probabile complesso
calcolo nonpolinominale, come la fattorizzazione, in un più semplice calcolo
lineare, di tipo P=k×N; nel nostro caso P=q=N/(6a±1) con k=6 ed
N coincidente con "a"=tutti i numeri interi fino a un certo /6+
1; qui, però, N è il numero da scomporre e non il simbolo "N" della P=k×N.
Riporto dal libro di fisica quantistica Unocchiata alle carte di Dio
di Gian Carlo Ghirardi (EST), pag. 291:
Si possono dare gradi molto diversi di complessità (computazionale). Per i nostri scopi considereremo solo i cosiddetti casi lineare, polinomiale, nonpolinominale ed esponenziale.
Diciamo che il problema ha complessità lineare quando il numero di passi necessari per risolverlo cresce proporzionalmente a N [caso nostro della 1.2, ndA]. Detto P questo numero, si avrà allora P=k×N con k una costante positiva che non ci interessa precisare. Si dirà invece che la complessità risulta polinomiale, quando il numero P cresce come un polinomio di N, per esempio P=aN3+bN2+c… Se non si dà nessuno dei casi considerati, si dirà che la complessità computazionale del problema è nonpolinominale.
Tra questi tipi di problemi sono particolarmente rilevanti quelli che presentano una complessità esponenziale…
Passiamo ora a considerare una famiglia di problemi che presentano una caratteristica peculiare. Si considerano due operazioni che sono l'inverso l'una dall'altra.
Accade, in certi casi, che mentre è relativamente semplice eseguire l'operazione diretta (tipicamente … lineare o al più polinomiale) l'operazione inversa può risultare estremamente ardua e costituire un problema con difficoltà computazionale non polinomiale. Il più noto, e forse il più studiato problema di questo tipo è quello di decomporre nei suoi fattori il prodotto di due numeri primi.
Ovviamente il problema diventa interessante quanto il numero delle cifre N del prodotto risulta notevolmente elevato…
Anche se non è stato possibile dimostrare che l'operazione inversa cui siamo interessati presenta effettivamente una complessità nonpolinominale, nessuno è stato capace di elaborare un algoritmo che la rende facilmente eseguibile.
Il procedimento da seguire risulta più o meno quello ovvio, vale a dire quello di provare a dividere il prodotto per tutti i numeri primi a partire da 2 in su, fino a che si ottenga una divisione senza resto.
Il nostro algoritmo "lineare" della (1.2), invece, potrebbe
semplificare l'operazione di fattorizzazione, non tenendo presente la lista
dei numeri primi fino a .