+ All Categories
Home > Documents > ( AN ALGORITHM FOR SOLUTION OF QUADRATIC … · dei più efficienti moderni metodi di...

( AN ALGORITHM FOR SOLUTION OF QUADRATIC … · dei più efficienti moderni metodi di...

Date post: 21-Feb-2019
Category:
Upload: vokhanh
View: 216 times
Download: 0 times
Share this document with a friend
23
1 Cristiano Teodoro [email protected] UN ALGORITMO PER LA RISOLUZIONE DELLA CONGRUENZA QUADRATICA z 2 Q(mod p) ( AN ALGORITHM FOR SOLUTION OF QUADRATIC CONGRUENCES z 2 Q (mod p) Sommario: in questo articolo viene descritto un algoritmo per risolvere le congruenze quadratiche con modulo primo p di qualsiasi forma in modo molto più veloce ed efficace rispetto al banale algoritmo esaustivo. L’algoritmo proposto si basa sulle proprietà delle sequenze di Lucas. Dopo una breve premessa dedicata a chiarire il significato di congruenza e alla esposizione di formule risolutive per congruenze con moduli primi di forma particolare, vengono illustrate le sequenze di Lucas e le loro principali proprietà. Si passa quindi ad illustrare l’algoritmo la cui comprensione e realizzazione tocca sia argomenti della teoria dei numeri, quali le proprietà attinenti le congruenze, le cognizioni sui residui quadratici e non quadratici con una applicazione riguardante un efficiente algoritmo di calcolo del simbolo di Jacobi, sia l’utilizzo di originali formule di tipo iterativo per il calcolo di U(k) e V(k), previa la generazione di una conveniente successione dei loro indici.Per una migliore comprensione dell’algoritmo esposto si illustra una sua applicazione con un esempio che implica per ovvie ragioni di spazio valori numerici per Q e p costituiti da poche cifre. L’importanza di avere disponibile un algoritmo per una rapida e fattiva risoluzione di congruenze quadratiche con modulo p primo risulta evidente quando si pensi che il suo utilizzo è fondamentale ed indispensabile in uno dei più efficienti moderni metodi di fattorizzazione di un numero grande, il metodo del Crivello Quadratico (Quadratic Sieve). In allegato (Allegato1) è dato il listato in linguaggio Qbasic dell’algoritmo esposto riguardante congruenze quadratiche con valori del termine noto Q limitato a valori numerici costituiti al massimo da 15 cifre e a valori del modulo p con non più di 8 cifre, condizionamento questo dovuto alle limitazioni di precisione di calcolo della aritmetica a doppia precisione disponibile sul PC. L’algoritmo esposto si presta bene ad una sua programmazione con una aritmetica a precisione multipla in modo di poter trattare congruenze aventi termine noto Q sia positivo che negativo e modulo p primo grandi, costituiti anche da centinaia di cifre. E’ stato realizzato pertanto un più complesso programma sempre in Qbasic dove tutti i calcoli vengono realizzati in aritmetica a precisione multipla. Con tale programma si possono ottenere delle prestazioni di tempi di risoluzione estremamente più brevi rispetto a quelli ottenibili con un programma relativo al banale algoritmo esaustivo di risoluzione della congruenza. Non si è ritenuto opportuno allegare al presente articolo il suo listato, data la sua non indifferente lunghezza. Si allega invece una Tabella che riporta, ottenuti con tale programma, alcuni risultati di soluzioni di congruenze con valori sia piccoli che grandi di Q e di p con i tempi di calcolo riferibili ai due tipi di algoritmi: quello illustrato nell’articolo e quello di tipo esaustivo. Si riportano in allegato anche diversi esempi di risultati ottenuti. Vengono infine accennati i campi di applicazione e di utilizzo degli argomenti trattati, che non si limitano al solo campo della matematica, ma che toccano vari campi tecnologici, in particolare quello delle telecomunicazioni e della crittografia. Abstract: in this paper a fast algorithm for the exact resolution of quadratic congruences modulo any prime is proposed as on alternative to the trivial exhaustive method, very slower for high moduli (primes). The algorithm refers to the Lucas Sequences characteristics. After some preliminary remarks related to explain the congruence meaning and to show solution formulas for congruences with peculiar primes, we illustrate the main characteristics of these sequences. Then we explain the algorithm, whose understanding and implementation involves several elementary topics of the number theory, as the congruence properties, the quadratic and non quadratic residues, with an application pertaining to the Jacobi symbol calculus. So an original use of the U(k) and V(k) recurrence relation is illustrated, by previous production of a suitable sequence of k index .For a better understanding of the algorithm we show an application example with Q and p small values. The consequence of this algorithm is clear for its basic use in connection with the main Quadratic Sieve factorization method. We enclose in this article a program in Qbasic language of the algorithm (Allegato 1) , related to quadratic congruences with small values of Q and p input. This restriction is imposed by the use and the limits of double arithmetic precision. But the algorithm is suitable for a multiple precision arithmetic in order to handle congruences with large Q and modulus p, composed by several tens of digits or some hundred of digits. For this reason we have carried out a more complex program still in Qbasic language, but not enclosed to this paper. We achieve with this routine solution times much shorter compared to those realized by the trivial exhaustive algorithm. We report in a Table some examples of quadratic congruences solutions and of their computation times related to current and exhaustive algorithms as well some examples of solutions outputs. In the end we show briefly some technical application of the quadratic residues and quadratic congruence, related to the telecommunications and to the cryptography.
Transcript

1

Cristiano Teodoro

teodorocristianotiscaliit

UN ALGORITMO PER LA RISOLUZIONE DELLA CONGRUENZA QUADRATICA z 2 equiv Q(mod p) ( AN ALGORITHM FOR SOLUTION OF QUADRATIC CONGRUENCES z 2 equiv Q (mod p)

Sommario in questo articolo viene descritto un algoritmo per risolvere le congruenze quadratiche con modulo primo p di qualsiasi forma in modo molto piugrave veloce ed efficace rispetto al banale algoritmo esaustivo Lrsquoalgoritmo proposto si basa sulle proprietagrave delle sequenze di Lucas Dopo una breve premessa dedicata a chiarire il significato di congruenza e alla esposizione di formule risolutive per congruenze con moduli primi di forma particolare vengono illustrate le sequenze di Lucas e le loro principali proprietagrave Si passa quindi ad illustrare lrsquoalgoritmo la cui comprensione e realizzazione tocca sia argomenti della teoria dei numeri quali le proprietagrave attinenti le congruenze le cognizioni sui residui quadratici e non quadratici con una applicazione riguardante un efficiente algoritmo di calcolo del simbolo di Jacobi sia lrsquoutilizzo di originali formule di tipo iterativo per il calcolo di U(k) e V(k) previa la generazione di una conveniente successione dei loro indiciPer una migliore comprensione dellrsquoalgoritmo esposto si illustra una sua applicazione con un esempio che implica per ovvie ragioni di spazio valori numerici per Q e p costituiti da poche cifre Lrsquoimportanza di avere disponibile un algoritmo per una rapida e fattiva risoluzione di congruenze quadratiche con modulo p primo risulta evidente quando si pensi che il suo utilizzo egrave fondamentale ed indispensabile in uno dei piugrave efficienti moderni metodi di fattorizzazione di un numero grande il metodo del Crivello Quadratico (Quadratic Sieve) In allegato (Allegato1) egrave dato il listato in linguaggio Qbasic dellrsquoalgoritmo esposto riguardante congruenze quadratiche con valori del termine noto Q limitato a valori numerici costituiti al massimo da 15 cifre e a valori del modulo p con non piugrave di 8 cifre condizionamento questo dovuto alle limitazioni di precisione di calcolo della aritmetica a doppia precisione disponibile sul PC Lrsquoalgoritmo esposto si presta bene ad una sua programmazione con una aritmetica a precisione multipla in modo di poter trattare congruenze aventi termine noto Q sia positivo che negativo e modulo p primo grandi costituiti anche da centinaia di cifre Ersquo stato realizzato pertanto un piugrave complesso programma sempre in Qbasic dove tutti i calcoli vengono realizzati in aritmetica a precisione multipla Con tale programma si possono ottenere delle prestazioni di tempi di risoluzione estremamente piugrave brevi rispetto a quelli ottenibili con un programma relativo al banale algoritmo esaustivo di risoluzione della congruenza Non si egrave ritenuto opportuno allegare al presente articolo il suo listato data la sua non indifferente lunghezza Si allega invece una Tabella che riporta ottenuti con tale programma alcuni risultati di soluzioni di congruenze con valori sia piccoli che grandi di Q e di p con i tempi di calcolo riferibili ai due tipi di algoritmi quello illustrato nellrsquoarticolo e quello di tipo esaustivo Si riportano in allegato anche diversi esempi di risultati ottenuti Vengono infine accennati i campi di applicazione e di utilizzo degli argomenti trattati che non si limitano al solo campo della matematica ma che toccano vari campi tecnologici in particolare quello delle telecomunicazioni e della crittografia Abstract in this paper a fast algorithm for the exact resolution of quadratic congruences modulo any prime is proposed as on alternative to the trivial exhaustive method very slower for high moduli (primes) The algorithm refers to the Lucas Sequences characteristics After some preliminary remarks related to explain the congruence meaning and to show solution formulas for congruences with peculiar primes we illustrate the main characteristics of these sequences Then we explain the algorithm whose understanding and implementation involves several elementary topics of the number theory as the congruence properties the quadratic and non quadratic residues with an application pertaining to the Jacobi symbol calculus So an original use of the U(k) and V(k) recurrence relation is illustrated by previous production of a suitable sequence of k index For a better understanding of the algorithm we show an application example with Q and p small values The consequence of this algorithm is clear for its basic use in connection with the main Quadratic Sieve factorization method We enclose in this article a program in Qbasic language of the algorithm (Allegato 1) related to quadratic congruences with small values of Q and p input This restriction is imposed by the use and the limits of double arithmetic precision But the algorithm is suitable for a multiple precision arithmetic in order to handle congruences with large Q and modulus p composed by several tens of digits or some hundred of digits For this reason we have carried out a more complex program still in Qbasic language but not enclosed to this paper We achieve with this routine solution times much shorter compared to those realized by the trivial exhaustive algorithm We report in a Table some examples of quadratic congruences solutions and of their computation times related to current and exhaustive algorithms as well some examples of solutions outputs In the end we show briefly some technical application of the quadratic residues and quadratic congruence related to the telecommunications and to the cryptography

2

Introduzione Chiariamo innanzitutto il significato dellrsquoespressione z 2 equiv Q (mod p) Nel campo della teoria delle congruenze [Tch] le espressioni della forma M equiv N (mod A) sono note col nome di congruenze i numeri interi M ed N si dicono congrui fra loro rispetto al numero A che si chiama modulo della congruenza detti numeri M ed N possono essere positivi o negativi in ogni caso la suddetta espressione indica la divisibilitagrave algebrica di M ndash N per A dove A viene considerato sempre positivo Nel nostro specifico caso lrsquoespressione z 2 equiv Q (mod p) egrave denominata congruenza binomia quadratica e si esprime dicendo che lrsquoincognita z elevata al quadrato egrave congrua modulo p al termine noto Q Con tale dizione si vuole significare che occorre trovare un valore dellrsquoincognita z sempre se esiste tale per cui il resto della divisione per p di essa elevata al quadrato sia il valore Q Se la congruenza ha come modulo un numero primo p e risulta risolubile ammette allora due soluzioni [Tch] ed il valore Q viene chiamato residuo quadratico di p Se essa non ha soluzioni Q viene chiamato non residuo quadratico di p Il numero p come giagrave accennato prende il nome di modulo della congruenza Per ora si prenderanno in considerazione per p solo numeri primi Nella letteratura tecnica si conoscono diversi algoritmi [Cip] [Kra] [Rie] [Rob ] [Wag] dedicati alla risoluzione della congruenza z 2 equiv Q (mod p) con p numero primo e Q ne 0 intero e primo con p

Quello banale della ricerca esaustiva di z estesa al limite sino al valore 2p

egrave senzrsquoaltro da scartare per la

durata eccessiva di calcolo anche per valori di p non molto grandi Ersquo noto poi [Tch] che la risoluzione di tale tipo di congruenza binomia risulta indispensabile per risolvere la congruenza quadratica di forma generale ax 2 + bx + c equiv 0 (mod p) dove abc sono degli interi p egrave primo e a egrave primo con p In effetti la suddetta congruenza ha soluzioni se e solo se la congruenza binomia z 2 equiv q (mod p) derivata da essa ponendo z = 2ax +b e q = 2b - 4ac risulta risolubile Inoltre da quanto si deduce dalla teoria delle congruenze [Tch] appurato che la suddetta congruenza binomia z 2 equiv q egrave risolubile e chiamate 1z e 2z le sue due soluzioni valgono le due seguenti congruenze lineari 2a 1x + b equiv 1z (mod p) 2a 2x + b equiv 2z (mod p) nelle incognite 1x e 2x che una volta trovate risultano essere le due soluzioni della congruenza quadratica ax 2 + bx + c equiv 0 (mod p) Esistono vari noti algoritmi come ad esempio quello ideato da Eulero [Eul] o quello basato sulle frazioni continue [Old][Te1] per risolvere una congruenza lineare su cui non egrave il caso qui di soffermarsi La risoluzione della z 2 equiv Q (mod p) tramite algoritmi piugrave o meno semplici dipende inoltre dalla forma di p se tale primo egrave della forma 4k + 3 egrave ben noto [Tch] [Rie] che i due valori di z soddisfacenti la congruenza previa verifica della loro esistenza sono dati dal resto della divisione di 1+kQ per p vale a dire 1z equiv 1+kQ (mod p) e 2z = p ndash 1z Il calcolo di 1z puograve essere pertanto effettuato con un efficiente algoritmo di esponenziazione modulare Diversi siti su Internet trattano questo algoritmo ad esempio [SI0] Per una sua esauriente esposizione e comprensione si rimanda allrsquoesemplare articolo di C Pomerance [Pom] Nel caso poi in cui il primo p egrave della forma 8k + 5 le soluzioni della congruenza sono le seguenti [Cip]

1z equiv 21 8

3+p

Q middot ( 41

2minusp

+ 1 - ( 41

2minusp

- 1 ) middot 41minusp

Q ) ( mod p ) 2z = p ndash 1z

Ovvero 1z equiv sdot21

sdot+1kQ ( )121212 )12(12 +++ sdotminusminus+ kkk Q ( mod p ) 2z = p ndash 1z

In questo caso llsquoalgoritmo della esponenziazione modulare saragrave usato piugrave volte Anche per un primo p della forma 4k +1 esiste una formula [Cip] per il valore risolutivo di z previo il calcolo di un qualsiasi non residuo quadratico di p Per la sua espressione si rimanda a [Cip]Dic] Ersquo perograve da chiarire che lrsquoimpiego di tale formula riportata comunque qui di seguito risulta conveniente solo se posto p

sotto la forma p = h r2 + 1 lrsquoesponente r egrave di valore non grande

equivz sdotminus

+minus+

2

221

2

1

r

pr

r

Qsum

minus

=minus+

minusminus

minus

12

0 2)1)(12(

2)1(

1

1

r

r

r

sps

ps

nr

Q )(mod p

dove nr egrave un qualsiasi non residuo quadratico di p e r2 egrave la massima potenza di 2 che divide p ndash 1

3

In questo articolo si vuole mostrare un algoritmo che si basa sullrsquoutilizzo delle Sequenze di Lucas per la risoluzione della congruenza z 2 equiv Q (mod p) con p primo di qualsiasi forma Prima perograve di entrare in merito allrsquoalgoritmo egrave opportuno dare qualche cenno nei riguardi di queste sequenze Sequenze di Lucas [Rie] [Rib] [SI3] Detti P Q due numeri interi diversi da zero si consideri la forma quadratica x 2 + Pmiddotx + Q = 0 che prende il nome di equazione caratteristica il suo discriminante egrave QPD 42 minus= Si prendano in esame due successioni o sequenze di numeri interi una il cui termine generico saragrave indicato con U(k) lrsquoaltra con il termine generico V(k) dove k = 012 3 hellip egrave lrsquoindice che individua la posizione dei numeri U e V nella successione I primi due termini relativi alla sequenza dei numeri U(k) siano U(0) = 0 U(1) = 1 e per la sequenza dei numeri V(k) V(0) = 2 V(1) = P inoltre per ogni k ge 2 si ponga U(k) = PmiddotU(k -1) ndash QmiddotU(k-2) (1) V(k) = PmiddotV(k -1) ndash QmiddotV(k-2) (2) La sequenza dei numeri V(k) prende il nome di sequenza associata (companion) a quella dei numeri U(k) In un precedente articolo dedicato tali tipi di sequenze [Teo] si era accennato a queste sequenze numeriche allora si erano illustrate solo due particolari sequenze tra loro associate e precisamente la successione dei Numeri di Fibonacci e la successione dei Numeri di Lucas che si ottengono con le regole generali indicate sopra e ponendo P = 1 e Q = ndash1 Qui nellrsquoutilizzo delle sequenze di Lucas per trovare le soluzioni della congruenza z 2 equiv Q (mod p) se esistono dobbiamo considerarle in modo piugrave generale vale a dire con il termine noto qualsiasi Q della congruenza pari al valore Q dellrsquoequazione caratteristica e con un opportuno P che puograve avere valore diverso da 1 e del quale parleremo piugrave avanti Algoritmo per la risoluzione di z 2 equiv Q (mod p) La possibilitagrave di impiegare le sequenze di Lucas per risolvere la congruenza si basa su quanto segue [Rie] [Rob] ldquoData la congruenza z 2 equiv Q (mod p) se essa egrave risolubile prese in considerazione le due sequenze di Lucas U(k) e V(k) derivate dallrsquoequazione caratteristica x 2 + Pmiddotx + LQ = 0 con LQ = Q e P scelto

in modo che 2P ndash 4middotQ sia un non residuo quadratico di p si dimostra che i valori plusmn 2

)(kV (mod p)

con indice k = 2

1+p sono le soluzioni cercate della congruenza

Per quanto riguarda i valori U(k) si trova che per tale indice il valore U(k) risulta congruo a 0 (mod p) cioegrave U(k) equiv 0 (mod p) rdquo La condizione che il valore U(k) equiv 0 (mod p) puograve essere presa come provanon assoluta comunque che i

valori trovati plusmn 2

)(kV (mod p) con indice k =

21+p

sono effettivamente validi

Vediamo ora quali sono i diversi passi con cui procedere per poter risolvere efficacemente la congruenza a) ndash prima di introdurre il numero p si deve controllare che esso sia effettivamente un numero primo b) ndash si deve verificare che q e p qualora sia q gt 2p siano primi fra loro c) ndash si deve appurare quindi che la congruenza ammette soluzioni si dimostra [Tch][Cip][Hur] che

essa ha due soluzioni 1z e 2z = p ndash 1z se Q egrave residuo quadratico di p vale a dire se Q 21minusp

equiv +1 (mod p)

se Q risulta un non residuo quadratico di p cioegrave se Q 21minusp

equiv ndash1 (mod p) la congruenza non ha soluzioni e la ricerca ha termine

4

La verifica che il numero Q sia residuo quadratico o meno di p viene effettuata calcolando il simbolo di Jacobi [Cip] [Tch] [SI1] [SI2] che in questo caso essendo p primo coincide con il simbolo di Legendre

ed egrave indicato come segue ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

Si ha pertanto ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= Q 21minusp

(mod p) e quindi se ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

equiv +1 Q egrave

residuo quadratico di p se ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

equiv ndash1 Q egrave non residuo quadratico di p

d) ndash si deve poi trovare un opportuno minimo valore di P tale per cui D = P 2 ndash 4middotQ sia un non

residuo quadratico di p cioegrave ⎟⎟⎠

⎞⎜⎜⎝

⎛pD equiv ndash1 (mod p)

e) ndash effettuati questi calcoli occorre trovare un valido algoritmo per calcolare il valore plusmn 2

)(kV (mod p)

dove k = 2

1+p utilizzando perograve formule diverse dalle (1) e (2) in quanto con esse si dovrebbero calcolare

tutti i valori di U e di V precedenti il valore V ( 2

1+p ) il che come giagrave appurato nellrsquoarticolo citato

allungherebbe di molto il tempo di esecuzione Il programma scritto in linguaggio Qbasic riportato nellrsquoAllegato 1 comprende i vari punti sotto elencati ad esclusione del punto a) ciascuno dedicato a sviluppare algoritmi preposti a risolverli Si elencano qui di seguito i diversi algoritmi che devono essere preventivamente utilizzati nel programma prima di arrivare a quello di cui al punto e) Punto a) - egrave opportuno controllare preventivamente che il numero p sia effettivamente primo solo se p egrave primo si procederagrave ad introdurlo si prosegue quindi nella costruzione dellrsquoalgoritmo per soddisfare quanto richiesto al punto b) Punto b) - per verificare che il termine noto Q ed il modulo p siano primi tra loro si controlla che il loro Massimo Comun Divisore (mcd) abbia valore 1 Si puograve perograve evitare il calcolo del (mcd ) anche se non oneroso osservando che nellrsquoeffettuare al punto c) il calcolo del simbolo di Jacobi se si trovasse per tale simbolo il valore 0 (zero) ciograve indicherebbe che i numeri Q e p non sono primi fra loro

Punto c) - per trovare il valore del simbolo di Jacobi ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

non conviene procedere con il metodo ovvio

di esponenziazione modulare per calcolare il valore Q 21minusp

(mod p) ma con un algoritmo alternativo che consente di arrivare al risultato molto piugrave velocemente Questo algoritmo si basa sulle cinque seguenti proprietagrave e relazioni c1) c2) c3) c4) c5) attinenti il simbolo di Jacobi [Cip] [SI1[SI2]

c1 ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= (-1 ) 21minusQ

21minusp

⎟⎟⎠

⎞⎜⎜⎝

⎛Qp

c2 ⎟⎟⎠

⎞⎜⎜⎝

⎛p2

= (-1) 812 minusp

c3 ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= ⎟⎟⎠

⎞⎜⎜⎝

⎛pr

se Q equiv r ( mod p) c4 ⎟⎟⎠

⎞⎜⎜⎝

⎛p1

= 1 c5 ⎟⎟⎠

⎞⎜⎜⎝

⎛ minusp1

= (-1 ) 21minusp

Punto d) - per la ricerca dellrsquo appropriato minimo valore di P si sfrutta lo stesso algoritmo di cui al punto c) aggiungendo tuttavia nel programma da realizzare opportune istruzioni per tenere conto che occorreragrave ricercare il valore di P tramite anche diverse iterazioni da effettuarsi sullrsquoalgoritmo stesso Punto e) - Oggetto principale del presente articolo egrave quello di illustrare un algoritmo atto al calcolo rapido di un qualsiasi valore V(k) (mod p) della sequenza di Lucas relativa ai suddetti valori di Q e di P In

particolare si deve predisporre un efficiente algoritmo relativo al calcolo di plusmn2

)(kV (mod p) per un indice

5

k = 2

1+p Non essendo opportuno come giagrave accennato ricorrere allrsquouso delle relazioni (1) e (2) egrave necessario

rivolgere lrsquoattenzione ad altre formule relative ai termini U(k) e V(k) Sussistono in effetti le seguenti relazioni [Rib] [SI3] tra i valori delle due sequenze U(2middotk) = U (k)middotV(k) (3) V(2middotk) = V(k) 2 ndash 2middotQ k (4) 2middotU(2middotk+1) = U(2middotk)middotV(1) + V(2k)middotU(1) (5) 2middotV(2middotk+1) = V(2middotk)middotV(1) +DmiddotU(2middotk)middotU(1) (6) dove con k si intende il generico indice Poicheacute U(1) = 1 e V(1) = P tenendo conto delle relazioni (3) e (4 le due relazioni (5) e (6) si possono scrivere come segue 2middotU(2middotk+1) = P middot U (k) middot V(k) + V(k) 2 ndash 2middotQ k (7) 2middotV(2middotk+1) = P middot V(k) 2 + D middot U (k) middot V(k) ndash 2middotPmiddotQ k (8) dove ricordiamo D =P 2 ndash 4middotQ Dalle suddette relazioni si constata che valori di U(k) e V(k) ricavati dalle (3) e (4) relativi ad un generico indice pari 2middotk e dalle (7) e (8) relativi ad un generico indice dispari 2middotk +1 dipendono unicamente dallrsquoindice k e dai valori assunti da U e da V relativi a tale indice k Dallrsquoattenta osservazione dei valori degli indici riportati nelle suddette formule il calcolo dei valori U( sk ) e V( sk ) di un indice prefissato sk puograve essere eseguito con efficacia previa la realizzazione di una adeguata e limitata successione di indici k costruita con le seguenti regole

1) partendo dallrsquoindice sk che interessa il successivo indice da trovare egrave il seguente

1minussk =2

sk se sk egrave di valore pari 1minussk =

21minussk

se sk egrave di valore dispari

2) gli ulteriori indici 2minussk 3minussk helliphelliphelliphellip 2k 1k 0k della successione si trovano applicando a ciascuno di loro lrsquooperazione del tipo di cui al punto 1)

Si noti che tali indici assumono valori sempre piugrave piccoli fino ad arrivare allrsquoindice 0k di valore 1 Cosigrave operando si arriveragrave ad individuare tutti i valori numerici degli indici della successione sino allrsquoultimo

0k che ha valore 1 qualsiasi sia il valore dellrsquoindice sk di partenza Ersquo facile vedere poi che la successione degli indici da trovare non considerando pertanto lrsquoindice sk che egrave

noto egrave costituita solo da s = ⎥⎦

⎥⎢⎣

⎢2

)(Log

kLog s indici

Una volta ottenuta e opportunamente memorizzata tale successione di indici si devono considerare le formule (3) (4) (7) e (8) le quali prendendo in considerazione la successione degli indici possono essere scritte piugrave opportunamente nel seguente modo mettendo cosigrave in evidenza la loro natura (essenza ) iterativa

U (k i ) = U (k 1minusi ) middot V(k 1minusi ) (3b)

V (k i ) = V(k 1minusi ) 2 ndash 2 middot Q 1minusik (4b)

2 middot U (k i ) = P middot U (k 1minusi ) middot V(k 1minusi ) + V(k 1minusi ) 2 ndash 2 middot Q 1minusik (7b)

2 middot V (k i ) = P middot V(k 1minusi ) 2 + D middotU (k 1minusi ) middot V(k 1minusi ) ndash 2 middot P middot Q 1minusik (8b) Si osservi che dette formule danno luogo ad un calcolo di tipo iterativo il calcolo di U(k i ) e di V(k i ) puograve essere effettuato infatti con i valori di U(k 1minusi ) e di V(k 1minusi ) trovati nellrsquoiterazione precedente col valore dellrsquoindice k i anchrsquoesso giagrave trovato e con termine noto Q e dei valori P e D giagrave calcolati

6

Si dovranno poi prendere in considerazione le formule (3b ) e (4b) se lrsquoindice k i egrave di valore pari utilizzare invece le formule (7b) e(8b) se esso egrave di valore dispari Si puograve arrivare cosigrave al calcolo di U( sk ) e

di V( sk ) attraverso un ciclo limitato di s = ⎥⎦

⎥⎢⎣

⎢2

)(Log

kLog s iterazioni utilizzando gli indici trovati e

opportunamente memorizzati della successione Ersquo importante sottolineare che tutti i calcoli da effettuare sulle suddette formule sono da eseguirsi modulo p Ciograve significa che ogni risultato R di una qualsiasi operazione aritmetica qualora superi il valore p non puograve essere utilizzato come tale per una ulteriore operazione aritmetica al suo posto nel proseguimento dei calcoli deve essere utilizzato il resto r ottenuto dalla divisione di R per p Tutto ciograve viene indicato dicendo che le operazione aritmetiche sono effettuate ldquo(mod p)rdquo ed il valore r prende il nome di residuo modulo p di R Nel nostro caso per trovare lrsquoopportuna successione di indici di

valore numerico decrescente si deve partire dallrsquoindice sk =2

1+p

Avendo a disposizione la successione desiderata degli indici percheacute preventivamente memorizzata si parta ora dallrsquoindice k 0 = 1 e dai valori conosciuti di U(k 0 ) =1 e di V(k 0 ) = P risalendo poi passo passo tenendo conto dei particolari indici trovati della successione di valore sempre piugrave grande si egrave in grado di calcolare con le formule a disposizione i valori di U(k i ) e di V(k i ) relativi allrsquoindice k i utilizzando unicamente i valori di U(k 1minusi ) di V(k 1minusi ) e dellrsquoindice k 1minusi oltre naturalmente i valori del coefficiente noto Q e dei valori di P e D Il calcolo di U(k i ) e di V(k i ) potragrave quindi essere effettuato con i valori di U(k 1minusi ) e di V(k 1minusi ) giagrave trovati nellrsquoiterazione precedente dellrsquoindice k i preventivamente calcolato e dei termini noti Q P e D Si dovranno poi prendere come giagrave detto in considerazione le formule (3b) e (4b) se lrsquoindice k i egrave di valore pari si dovranno invece utilizzare le formule (7b) e(8b) se esso egrave di valore dispari

Pertanto attraverso il calcolo di un numero limitato di iterazioni pari a ⎥⎦

⎥⎢⎣

⎢2Log

Logks con sk = 2

1+p partendo

dallrsquoindice k 0 = 1 si possono trovare i valori di U( sk ) e di V( sk ) desiderati Esempio Vediamo di chiarire meglio tutto quanto finora esposto con un esempio molto semplice ma significativo I risultati qui esposti sono stati trovati con il programma il cui listato egrave riportato in Allegato 1 del presente articolo Si voglia risolvere la semplice congruenza z 2 equiv ndash 47 (mod 1427) dove Q = ndash 47 e p = 1427 Si sia giagrave verificato che il numero 1427 egrave primo per cui q e p sono primi fra loro essendo q lt p Si deve vedere ora se la congruenza egrave risolubile o meno calcolando il valore del simbolo di Jacobi

⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= ⎟⎠⎞

⎜⎝⎛ minus1427

47

Piugrave che effettuare il calcolo diretto cercando il valore assunto da Q 21minusp

= 10 211427minus

(mod 1427) con lrsquoalgoritmo di esponenziazione modulare egrave conveniente utilizzare un algoritmo che utilizzi le formule c1 c2 c3 c4 e c5 sopra riportate con le quali si puograve realizzare un piugrave efficiente e veloce algoritmo di calcolo Ad esempio con i presenti valori impiegando il primo algoritmo sono necessarie 9 iterazioni con il secondo sono necessarie solo 4 iterazioni In generale lrsquouso del secondo algoritmo egrave tanto piugrave conveniente quanto piugrave grandi sono i valori di p Se il

valore di ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

egrave ndash1 la congruenza non egrave risolubile e quindi la ricerca termina Tornando alla congruenza

z 2 equiv ndash 47 (mod 1427) ed al relativo Simbolo di Jacobi = ⎟⎠⎞

⎜⎝⎛ minus1427

47 si ottiene per esso un valore + 1 per cui

egrave lecito proseguire nella risoluzione della congruenza

7

Proseguendo si deve trovare ora il minimo valore di P tale per cui D = P 2 ndash 4Q sia un non residuo quadratico di P Partendo con un valore di P = 1 si prosegue eventualmente con P =2 3 4 hellip

Ci si ferma nella ricerca allorcheacute il simbolo di Jacobi ⎟⎟⎠

⎞⎜⎜⎝

⎛ minusp

QP 4 risulta = ndash1

Utilizzando pertanto lo stesso algoritmo usato per il calcolo del simbolo di Jacobi partendo da un valore P = 1 dopo un numero limitato di iterazioni (in questo esempio bastano 3 iterazioni) si trova che per

P = 3 e quindi per D = 23 ndash 4middot (ndash 47) = 197 il simbolo di Jacobi ⎟⎠⎞

⎜⎝⎛1427197

vale ndash1 Applicando quanto

richiesto al punto e ) le formule (3bis) (4bis) (7bis) e (8bis) con i valori Q = ndash 47 P = 3 e D = 197 diventano per questo esempio le seguenti U(k i ) = U (k 1minusi )middotV(k 1minusi ) (3b)

V(k i ) = V(k 1minusi ) 2 ndash 2middot(- 47) 1minusik (4b)

2middotU(k i ) = 3middotU (k 1minusi )middotV(k 1minusi ) + V(k 1minusi ) 2 ndash 2middot(- 47) 1minusik (7b)

2middotV(k i ) = 3middotV(k 1minusi ) 2 + 197middotU (k 1minusi )middotV(k 1minusi ) ndash 2middot3middot(- 47) 1minusik (8b)

tramite le quali con un ciclo iterativo di operazioni (modulo p) si deve calcolare il valore di

2)( skV

(mod p) per sk = 2

1+p dove p = 1427 Il numero di iterazioni saragrave pari a ⎥

⎥⎢⎣

⎢2

)(Log

kLog s = 9

Vediamo ora di trovare la successione di indici k per arrivare al calcolo di V ⎟⎠⎞

⎜⎝⎛ +

211427

= V (714)

Innanzitutto la successione incluso lrsquoindice iniziale noto sk = 714 sino allrsquo indice k 0 = 1 egrave composta

da s +1 indici dove s = ⎥⎦

⎥⎢⎣

⎢2

714Log

Log = 9 Con le regole citate partendo da sk = 9k =

211427 +

= 714 si

possono calcolare gli altri valori decrescenti dei successivi indici k poicheacute sk egrave pari si ottiene 1minussk =

= 8k = 2

714 = 357 che essendo dispari daragrave luogo a sua volta ad un indice 2minussk = 7k di valore

21357 minus

=

= 178 Questo indice di valore pari daragrave luogo allrsquoindice 3minussk = 6k = 2

178 = 89 proseguendo con il

calcolo dei successivi indici si otterranno i seguenti valori

k 5 = 2

189 minus = 44 k 4 =

244

= 22 3k =222

= 11 2k = 2

111minus = 5 1k =

215minus

= 2 k 0 = 22

= 1

si ha pertanto seguente successione limitata di indici di valore numerico decrescente sia pari che dispari k 9 = 714 k 8 = 357 k 7 = 178 k 6 = 89 k 5 = 44 k 4 = 22 k 3 = 11 k 2 = 5 k1 = 2 k 0 = 1

8

Sempre per lrsquoesempio riportato si puograve costituire cosigrave la seguente tabella esplicativa

iterazione Passaggio indici Formule U (k 1minusi ) U (k i ) V(k 1minusi ) V (k i )

d a k 1minusi a k i da usare

1 a k 0 = 1 k 1 = 2 (3b) e (4b) U(1) U(2) V(1) V(2)

2 a k 1 = 2 k 2 = 5 (7b) e (8b) U(2) U(5) V (2) V(5)

3 a k 2 = 5 k 3 = 11 (7b) e (8b) U(5) U(11) V (5) V(11)

4 a k 3 = 11 k 4 = 22 (3b) e (4b) U(11) U (22) V(11) V(22)

5 a k 4 = 22 k 5 = 44 (3b) e (4b) U(22) U (44) V22) V(44)

6 a k 5 = 44 k 6 = 89 (7b) e (8b) U(44) U (89) V(44) V(89)

7 a k 6 = 89 k 7 = 178 (3b) e (4b) U(89) U (178) V(89) V(178)

8 a k 7 = 178 k 8 = 357 (7b) e (8b) U(178) U (357) V(178) V(357)

9 a k 8 = 357 k 9 = 714 (3b) e (4b) U(357) U (714) V(357) V(714)

Si ribadisce ancora una volta che tutti i calcoli per trovare valori di U e di V sono da effettuare in aritmetica modulo p (mod p) Ciograve comporta che tutti i valori numerici dei diversi U(k) e V(k) trovati non saranno mai superiori a p Per il calcolo dellrsquooperazione di elevazione a potenza Q k (mod p) che compare nelle formule si puograve fare ricorso allrsquo algoritmo della esponenziazione modulare Osservando perograve la particolare successione di indici ottenuti si puograve evitare tale tipo di algoritmo che pur efficiente allungherebbe sia il numero di istruzioni nel programma sia anche i tempi do calcolo rispetto ad un algoritmo basato sostanzialmente sulla seguente considerazione si osservi che passando da una iterazione a quella successiva

ikQ risulta essere pari a ( )21minusikQ se lrsquoindice 1minusik egrave un numero pari

ikQ risulta essere pari a ( )21minusikQ middot Q se lrsquoindice 1minusik egrave un numero dispari

Naturalmente i suddetti valori devono essere sempre calcolati (mod p ) Per completezza si riportano qui di seguito partendo dai valori iniziali di U e di V i successivi valori numerici di U e di V trovati in ciascuna iterazione (it) valori iniziali U = 1 V = P = 3 1 a it U(2) = 3 V(2) = 103 2 a it U(5) = 705 V(5) = 1194 3 a it U(11) = 926 V(11) = 581 4 a it U(22) = 27 V(22) = 1218 5 a it U(44) = 65 V(44) = 892 6 a it U(89) = 582 V(89) = 726 7 a it U(178) = 140 V(178) = 597 8 a it U(357) = 0 V(357) = 885 9 a it U(714) = 0 V(714) = 1328

il risultato V(714) = 1328 della 9 a e ultima iterazione egrave il valore cercato V ⎟⎠⎞

⎜⎝⎛ +

21p

= V ⎟⎠⎞

⎜⎝⎛ +

211427

= = = =

= V(714) = 1328 che diviso per 2 da luogo ad una delle soluzioni della congruenza 1z = 2

)714(V =

21328

=

= 664 Lrsquoaltro valore della congruenza egrave immediato 2z = ndash 664 equiv p ndash 1z = 763 Si noti il valore 0 di

2)714(U

Egrave il caso di ricordare ancora una volta che tutti i valori numerici sono calcolati (mod p)

9

Risoluzione della Congruenza z 2 equiv Q (mod p) con valori di Q e p grandi Ersquo necessario a questo punto precisare quanto segue un calcolo per la congruenza relativa ad un modulo p piccolo come quello dellrsquoesempio sopra illustrato (p = 1427) potrebbe essere sviluppato anche piugrave opportunamente con un programma di calcolo con lrsquoalgoritmo di tipo esaustivo composto da poche istruzioni

formanti un ciclo di operazioni ripetuto al massimo 2p

Ciograve egrave vero per moduli p abbastanza piccoli ma si puograve giagrave constatare che nel risolvere una congruenza il cui modulo p sia un primo costituito da solo 8 cifre la differenza dei tempi di calcolo comincia a farsi sentire Ad esempio risolvendo la seguente congruenza z 2 equiv 3 (mod 85225897) su di uno stesso calcolatore e con lrsquoutilizzo di un medesimo linguaggio (Qbasic) si sono ottenuti i seguenti tempi di risoluzione - con algoritmo esaustivo un tempo di 31 secondi - con algoritmo illustrato un tempo praticamente immediato

Il calcolo in questo caso egrave stato effettuato tramite lrsquoesecuzione di un programma realizzato e scritto in linguaggio Qbasic relativo alla risoluzione di una qualsiasi congruenza quadratica avente valori di Q e di p non grandi tali cioegrave di poter risolvere la congruenza in modo esatto con lrsquoutilizzo della sola aritmetica in doppia precisione disponibile sul nel software utilizzato Pertanto nel nostre caso occorre che Q sia composto da non piugrave di 15 cifre e p da non piugrave di 7 cifre Il listato del programma egrave riportato nellrsquo Allegato 1 Per moduli p anche non eccessivamente grandi costituiti da appena 16 cifre si egrave potuto constatare tramite apposito programma a precisione multipla che mentre il tempo impiegato per conoscere se la congruenza egrave risolubile e in tal caso calcolarne le soluzioni egrave praticamente immediato con un programma esaustivo naturalmente estrapolando i tempi ottenuti per moduli p piccoli ( p con 7 cifre e 8 cifre) il tempo di calcolo sarebbe maggiore ai 10 anni Per moduli p con 20 cifre si potrebbe avere addirittura un tempo di verifica e calcolo superiore ai 50 mila anni Che sia importante realizzare un algoritmo e di conseguenza un programma con cui risolvere in tempi brevi le congruenze con valori per Q per p grandi risulta evidente non solo da un punto di vista euristico ma anche quando si deve effettuare la scomposizione in fattori di un numero composto grande Infatti in uno dei piugrave moderni ed efficienti metodi di fattorizzazione di numeri grandi vale a dire il metodo del ldquoCrivello Quadraticordquo (Quadratic Sieve) egrave indispensabile risolvere preliminarmente diverse congruenze quadratiche anche con moduli primi di discrete dimensioni [Kob] [Bre] [SI4 [SI5] [SI6] Inoltre pure nel il campo della crittografia risulta necessario poter risolvere questo tipo di congruenza (vedi piugrave avanti il paragrafo delle applicazioni tecniche) Pertanto si egrave realizzato un ulteriore programma sempre in linguaggio Qbasic dedicato a valori per p e per Q che possono avere valori grandi composti ciascuno anche da diverse decine di cifre In effetti esso egrave atto a risolvere una qualsiasi congruenza quadratica avente termine noto Q sia positivo che negativo costituito sino a qualche centinaia di cifre e con modulo p primo ldquolimitatordquo composto al massimo da 125 cifre Questo limite egrave determinato dallrsquoaver utilizzato nelle istruzioni un solo array bidimensionale (una matrice puograve essere composta al massimo da 8000 elementi nel software Qbasic) per incamerare e memorizzare tutti gli

appositi indici k (da sk = 2

1+p a 0k = 1) trovati con le regole sopraesposte relativi ai valori U(k) e V(k)

In tale programma non essendo sufficienti i calcoli in doppia precisione relativi a tutte le operazioni aritmetiche presenti nel listato del programma mostrato in Allegato 1 le analoghe operazioni aritmetiche vengono effettuate compresa la divisione in aritmetica a precisione multipla Ciograve comporta lrsquoesattezza di tutti i calcoli su numeri grandi e sui risultati ottenuti a scapito perograve di una piugrave onerosa realizzazione del programma dato il grande numero di istruzioni e la loro maggiore complessitagrave necessarie allrsquoesecuzione delle varie operazioni aritmetiche Non si egrave ritenuto opportuno allegare al presente articolo per non appesantirlo troppo il listato del suddetto programma data la sua non indifferente lunghezza In una Tabella sotto riportata sono illustrati comunque alcuni risultati di esempi di risoluzione relativi a congruenze quadratiche ottenuti utilizzando il programma suddetto Nella penultima colonna della tabella egrave mostrato il tempo di calcolo richiesto con lrsquoalgoritmo illustrato Tal nellrsquoultima colonna egrave mostrato invece il tempo di calcolo necessario con lrsquoalgoritmo di tipo esaustivo Tes i valori con sono dedotti ovviamente per estrapolazione dai tempi ottenuti per moduli p di 7 e di 8 cifre Si noti che egrave impensabile intraprendere un calcolo esaustivo per risolvere qualsiasi congruenza quadratica avente per modulo un primo p anche di solo 16 cifre Per una piugrave facile lettura dei valori numerici essi sono stati separati in gruppi di 7 cifre decimali come del resto calcolati nel programma avendo utilizzato per le

10

operazioni aritmetiche la Base (Radix) 710 di numerazione anzicheacute la normale Base 110 Si fa osservare che ad un gruppo di 7 cifre in base 10 si fa corrispondere una singola cifra in aritmetica in Base 710 Considerazioni sulla congruenza z 2 equiv Q (mod n ) con n composto Finora si sono considerate congruenze aventi come moduli numeri primi p Per diversi algoritmi crittografici occorre trovare i valori che soddisfano una congruenza del tipo z 2 equiv Q (mod n ) con n composto dal prodotto di due numeri primi cioegrave n = 21 pp sdot con 1p e 2p numeri primi grandi costituiti ciascuno anche da piugrave di 150 cifre decimali Cosa si puograve dire riguardo ad un tale tipo di congruenza quadratica In generale la risoluzione di una congruenza quadratica con modulo composto presenta le stesse difficoltagrave del problema della fattorizzazione di un numero in quanto il primo passo per la sua eventuale risoluzione egrave quello di scomporre in fattori il modulo n

In questo specifico caso perograve si supponga di conoscere a priori i fattori 1p e 2p che compongono il modulo Si supponga anche che n e Q siano primi tra loro cioegrave che si abbia (Q n) = 1 dove con tale simbologia viene indicato il Massimo Comun Divisore fra Q ed n Condizione indispensabile percheacute la congruenza z 2 equiv Q (mod 21 pp sdot ) sia risolubile egrave che siano risolubili entrambe le due seguenti congruenze z 2 equiv Q (mod 1p ) e z 2 equiv Q (mod 2p ) In effetti se anche una sola delle due congruenze non risulta risolubile anche la congruenza con modulo n = 21 pp sdot non lo egrave [Tch] [Nag] Una volta risolte le due congruenze quadratiche rispettivamente con modulo 1p e modulo 2p ciascuna delle quali presenteragrave due valori numerici che la soddisfano si avranno disponibili 4 congruenze lineari z equiv 11z (mod 1p ) z equiv 12z (mod 1p ) relative alla congruenza con modulo 1p z equiv 21z (mod 2p ) z equiv 22z (mod 2p ) relative alla congruenza con modulo 2p con le quali si possono formare 22 distinti sistemi di congruenze composti ciascuno da 2 congruenze lineariSi tenga presente che in uno qualsiasi di questi 4 sistemi non devono mai comparire due congruenze lineari i cui termini noti siano le soluzioni di una stessa congruenza quadratica Ersquo ben noto che per trovare una soluzione atta a soddisfare un insieme di congruenze lineari bisogna far ricorso al Teorema cinese dei resti Per detto teorema si puograve fare riferimento ad una vasta bibliografia di cui si riportano solo alcuni riferimenti [Bar] [Niv] [Wag] relativi anche ad indirizzi di Siti Internet [SI4][SI5] Questo teorema ci assicura che dato un insieme di congruenze lineari se i vari moduli delle congruenze sono relativamente primi fra loro esiste un valore comune tale da soddisfare simultaneamente ognuna della congruenze Utilizzandolo nel nostro caso avremo che un generico valore dei 4 valori di z 2 equiv Q (mod n ) che la soddisfano puograve essere trovato tramite la seguente formula

nz = iz1 middot 1b middot1p

n + iz2 middot 2b middot

2pn

con i = 12

dove ogni ib si ricava risolvendo la congruenza lineare ip

nmiddot ib equiv 1 ( mod ip )

Alcune applicazioni tecniche Vi sono delle interessanti applicazioni tecniche in cui vengono implicati e utilizzati argomenti trattati nel presente articolo specie nel campo delle telecomunicazioni e della crittografia Ci limiteremo ad elencare qui alcune di quelli indicati in [Shr] e in [Schn] Per i residui quadratici - Applicazione di successioni di residui quadratici nella progettazione riguardante unrsquoampia diffusione di onde sonore negli ambienti per migliorare la qualitagrave acustica - Possibili applicazioni nella copertura radar e sonar nella riduzione del rumore - Applicazione per la riduzione delle interferenze in particolare riguardo al ldquojammingrdquo nelle comunicazioni

11

via radio in cui egrave raccomandato lrsquouso di larghi spettri in effetti nellrsquoutilizzo di una stessa banda di frequenze fra piugrave utenti si puograve dimostrare che lrsquoattribuzione di particolari successioni di residui quadratici da assegnare ad ognuno di loro permette di ridurre al minimo le interferenze fra le varie trasmissioni pur essendo esse contemporanee Per le congruenze quadratiche Oltre al loro giagrave summenzionato utilizzo in uno dei piugrave efficienti metodi di scomposizione in fattori di numeri grandi (Quadratic Sieve Method) altre applicazioni riguardano soprattutto il campo della crittografia abbinata al campo delle telecomunicazioni quali ad esempio ndash il metodo crittografico di Rabin [Schn] vedi riquadro ndash il metodo di Ong ndash Shnorr- Shamir [Schn] relativo alla firma digitale ndash il metodo di zero ndash knowledge di Feige- Fiat - Shamir [Schn] dedicato allrsquorsquoautenticazione della firma

digitale Per le Sequenze di Lucas vi sono applicazioni che interessano sia crittosistemi a chiave pubblica come ad esempio il ldquoLUC Public Key Encriptionrdquo) valido quanto il crittosistema RSA sia test di primalitagrave Riguardo a questrsquoultimo argomento egrave da mettere in evidenza infatti che la ricerca e lrsquoindividuazione dei piugrave grandi numeri primi finora scoperti si egrave potuta realizzare grazie proprio allrsquoimpiego di dette sequenze METODO di RABIN

Il messaggio M viene crittografato secondo la relazione C equiv 2M ( mod N ) dove N egrave un numero composto dal prodotto di due grandi primi 1p e 2p ciascuno costituito da parecchie decine di cifre in ricezione lrsquoutente la cui chiave pubblica egrave il numero N

quando riceve il messaggio criptato C egrave lrsquounico a poterlo decifrare utilizzando le sue due chiavi segrete 1p e 2p Esso perograve deve

disporre di un algoritmo veloce ed efficace per decrittare il messaggio secondo la relazione 2z equiv C ( mod N ) la cui risoluzione

puograve essere effettuata solo risolvendo prima le due congruenze 2z equiv C (mod 1p ) e 2z equiv C (mod 2p ) quindi col ricorso del Teorema dei Resti Cinese risolvendo il sistema di due congruenze lineari impieganti le soluzioni delle suddette congruenze Si

dimostra infatti che uno dei quattro valori di z trovati che soddisfano la congruenza 2z equiv C ( mod N ) risulta essere il messaggio originale M Ersquo da osservare perograve che sussiste lrsquoambiguitagrave della scelta del messaggio effettivo fra i quattro valori di z Se il messaggio originale egrave un normale testo in italiano (o comunque in unrsquoaltra lingua) allora saragrave facile scegliere fra i quattro valori di z quello corretto In generale sussiste la suddetta ambiguitagrave ----------------------------------------------------------------------------- Un possibile metodo comunque non molto efficiente per ovviare a ciograve potrebbe essere il seguente lrsquoutente a cui egrave destinato il messaggio mette a disposizione due chiavi pubbliche 1N = 1p middot 2p e 2N = 3p middot 4p avendo come sue chiavi segrete i quattro

numeri primi 1p 2p 3p e 4p Esso riceveragrave pertanto due messaggi criptati 1C equiv 2M (mod 1N ) e 2C equiv 2M (mod

2N ) che decritteragrave risolvendo le due congruenze quadratiche 2z equiv 1C (mod 1N ) e 2z equiv 2C (mod 2N ) Si avranno cosigrave disponibili quattro valori risolutivi per la prima congruenza ed altri quattro per la seconda Osservando queste otto soluzioni solo due in generale saranno identiche una estratta fra le quattro della prima congruenza lrsquoaltra estratta dalle altre quattro relative alla seconda congruenza Saragrave pertanto questa soluzione comune il messaggio originale M Nota sui residui Occorre tener conto che sui residui ottenuti si possono effettuare se necessarie le seguenti operazioni lecite in aritmetica modulare 1 ) se rn lt 0 egrave il residuo negativo (mod p ) di un valore numerico negativo ndashR i molti casi risulta preferibile sostituire questo valore negativo rn con lrsquoequivalente (piugrave prossimo a 0) residuo rp positivo ( mod p) di ndashR che risulta essere rp = p - |rn| Tale sostituzione risulta indispensabile allorcheacute si devono effettuare i calcoli in aritmetica a precisione multipla su grandi valori numerici non sono trattabili neanche con lrsquoaritmetica la doppia precisione disponibile sul calcolatore nel linguaggio utilizzato 2) detto rd il residuo dispari di R ( mod p) per ottenere un intero quale residuo di rd 2 si calcola il

valore 2

prd + che saragrave senzrsquoaltro intero essendo pgt2 dispari

Questa operazione deve essere effettuata ad esempio quando nelle formule (7) e (8) utilizzate per il calcolo del residuo di 2middotU(2k+1) e di 2middotV(2k+1) il risultato dei calcoli (mod p) egrave un numero dispari dovendo trovare invece il residuo di U(2k+1) o di V(2k+1)

12

RIFERIMENTI [Bar] - GC Barozzi Aritmetica un approccio computazionale Zanichelli Bologna 1991 [Bre] - DMBressoud Factorization and Primality Testing Springer-Verlag New York 1989 [Cip] - MCipolla Teoria dei numeri Analisi Indeterminata in Enciclopedia delle Matematiche Elementari volI parte I Cap IV ndash Parte seconda - U Hoepli editore Milano [Dic] - L E Dickson ndash History of the Theory of Numbers Vol I ChapVII - Chelsea Publishing Company New York 1992 [Eul] - L Euler Eleacutemens drsquoAlgegravebre ndashTome second Analise Indetermineacutee Bachelier Librairie pour le Matheacutematiques Paris 1807 [Hur] - A Hurwitz ndash N Kritikos Lectures on Number Theory Springer-Verlag New York 1986 [Kob] - N Kobliz A Course in Number Theory and Criptography Springer-Verlag New York 1994 [Kra] - EKranakis Primality and Cryptography JWiley amp Sons 1986 [Lan] - E Landau Elementary Number Theory Chelsea Publishing Company New York 1966 Nag] - T Nagell Introduction to Number Theory Chelsea Publishing Company New York 1981 [Niv] - I Niven - HSZuckerman An Introduction to the Theory of Numbers JWiley amp Sons 1980 [Old] - CD Olds Frazioni continue Collana di Matematica Moderna ndash vol MM5 Zanichelli Bologna 1970 [Pom] - C Pomerance Alla ricerca dei numeri primi Le Scienze - quaderni n14 marzo 1984 [Rib] - P Ribenboim The Book of Prime Number Records Springer-Verlag New York 1989 [Rie] H Riesel Prime Number and Computer Methods for Factorization Birkhaumluser Boston 1985 [Rob] - G Robin Algorithmique et cryptographie Mathematiques amp Applications vol ndeg 8 (1991) Ellipses ndash Edition Marketing [Sch] - MR Schroeder La Teoria dei Numeri franco muzio amp ceditore Padova 1986 [Schn] - B Schneider Applied Cryptography John Wiley amp SInc New York [Tch] - P L Tchebichef Teoria delle Congruenze E Loescher amp Cdeg Roma 1895 [Te1] - C Teodoro La Generazione della chiave privata nellrsquoalgoritmo crittografico RSA a chiave pubblica in ldquomatematicamenteit ndash sezione Applicazioni Ingegneriardquo [Te2] - C Teodoro Un metodo per il calcolo veloce dei numeri di Fibonacci e di Lucas La Comunicazione anno 2001 Vol XLX [Wag] - SWagon Guida a Matematica ( capitoli 8 e 9) McGraw ndashHill Libri Italia srl Milano 1995 Siti Internet [SI0] - httpaieecsumichedupeopleroundsWinter02SlidesLectureApril4pdf [SI1] - http164813169Enciklopedijamathmathjj026htm [SI2] - httpwwwmathswtedu~hazprob_setsnotesnode34html [SI3] - httpmathworldwolframcomLucasSequencehtml [SI4] - httpmathworldwolframcomQuadraticSievehtml [SI5] - httpwwwmathksuedumath511notesiqs2000htm [SI6] - httpnethzchstudentralbrunnTQShtml [SI7] - httpmathworldwolframcomChinese Remainder Theoremhtml [SI8] - httpwwwmathswtedu~hazprob_setsnotesnode25html

Vengono riportati nelle pagine seguenti

- alcuni esempi di calcolo per congruenze con valori di q e di p non grandi ottenuti utilizzando il programma riportato in ALLEGATO 1

- una Tabella riguardante diversi risultati di risoluzione di congruenze quadratiche presentanti valori di Q e di p grandi e quindi risolte con lrsquoimpiego di apposito programma utilizzante una aritmetica a precisione multipla - altri esempi di calcolo per congruenze presentanti anche valori di Q e di p grandi risolte utilizzando un apposito programma con aritmetica a precisione multipla

13

ESEMPI di risoluzione della congruenza )(mod2 pQz equiv con lrsquoutilizzo del programma in Allegato 1

ESEMPIO n1 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q876543 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p113 k5 = 57 k4 = 28 k3 = 14 k2 = 7 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 5 1 ^it U( 3 ) = 23 V( 3 ) = 95 2 ^it U( 7 ) = 23 V( 7 ) = 76 3 ^it U( 14 ) = 53 V( 14 ) = 96 4 ^it U( 28 ) = 3 V( 28 ) = 65 5 ^it U( 57 ) = 0 V( 57 ) = 11 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 876543 (mod 113 )SONO z1 = 62 z2 = 51 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-7723 che (z2^2 - Q) p =-7734 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

14

ESEMPIO n2 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -47 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 1427 k9 = 714 k8 = 357 k7 = 178 k6 = 89 k5 = 44 k4 = 22 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 103 2 ^it U( 5 ) = 705 V( 5 ) = 1194 3 ^it U( 11 ) = 926 V( 11 ) = 581 4 ^it U( 22 ) = 27 V( 22 ) = 1218 5 ^it U( 44 ) = 65 V( 44 ) = 892 6 ^it U( 89 ) = 582 V( 89 ) = 726 7 ^it U( 178 ) = 140 V( 178 ) = 597 8 ^it U( 357 ) = 0 V( 357 ) = 885 9 ^it U( 714 ) = 0 V( 714 ) = 1328 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-47 (mod 1427 ) SONO z1 = 664 z2 = 763 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 309 che (z2^2 - Q) p = 408 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

2

Introduzione Chiariamo innanzitutto il significato dellrsquoespressione z 2 equiv Q (mod p) Nel campo della teoria delle congruenze [Tch] le espressioni della forma M equiv N (mod A) sono note col nome di congruenze i numeri interi M ed N si dicono congrui fra loro rispetto al numero A che si chiama modulo della congruenza detti numeri M ed N possono essere positivi o negativi in ogni caso la suddetta espressione indica la divisibilitagrave algebrica di M ndash N per A dove A viene considerato sempre positivo Nel nostro specifico caso lrsquoespressione z 2 equiv Q (mod p) egrave denominata congruenza binomia quadratica e si esprime dicendo che lrsquoincognita z elevata al quadrato egrave congrua modulo p al termine noto Q Con tale dizione si vuole significare che occorre trovare un valore dellrsquoincognita z sempre se esiste tale per cui il resto della divisione per p di essa elevata al quadrato sia il valore Q Se la congruenza ha come modulo un numero primo p e risulta risolubile ammette allora due soluzioni [Tch] ed il valore Q viene chiamato residuo quadratico di p Se essa non ha soluzioni Q viene chiamato non residuo quadratico di p Il numero p come giagrave accennato prende il nome di modulo della congruenza Per ora si prenderanno in considerazione per p solo numeri primi Nella letteratura tecnica si conoscono diversi algoritmi [Cip] [Kra] [Rie] [Rob ] [Wag] dedicati alla risoluzione della congruenza z 2 equiv Q (mod p) con p numero primo e Q ne 0 intero e primo con p

Quello banale della ricerca esaustiva di z estesa al limite sino al valore 2p

egrave senzrsquoaltro da scartare per la

durata eccessiva di calcolo anche per valori di p non molto grandi Ersquo noto poi [Tch] che la risoluzione di tale tipo di congruenza binomia risulta indispensabile per risolvere la congruenza quadratica di forma generale ax 2 + bx + c equiv 0 (mod p) dove abc sono degli interi p egrave primo e a egrave primo con p In effetti la suddetta congruenza ha soluzioni se e solo se la congruenza binomia z 2 equiv q (mod p) derivata da essa ponendo z = 2ax +b e q = 2b - 4ac risulta risolubile Inoltre da quanto si deduce dalla teoria delle congruenze [Tch] appurato che la suddetta congruenza binomia z 2 equiv q egrave risolubile e chiamate 1z e 2z le sue due soluzioni valgono le due seguenti congruenze lineari 2a 1x + b equiv 1z (mod p) 2a 2x + b equiv 2z (mod p) nelle incognite 1x e 2x che una volta trovate risultano essere le due soluzioni della congruenza quadratica ax 2 + bx + c equiv 0 (mod p) Esistono vari noti algoritmi come ad esempio quello ideato da Eulero [Eul] o quello basato sulle frazioni continue [Old][Te1] per risolvere una congruenza lineare su cui non egrave il caso qui di soffermarsi La risoluzione della z 2 equiv Q (mod p) tramite algoritmi piugrave o meno semplici dipende inoltre dalla forma di p se tale primo egrave della forma 4k + 3 egrave ben noto [Tch] [Rie] che i due valori di z soddisfacenti la congruenza previa verifica della loro esistenza sono dati dal resto della divisione di 1+kQ per p vale a dire 1z equiv 1+kQ (mod p) e 2z = p ndash 1z Il calcolo di 1z puograve essere pertanto effettuato con un efficiente algoritmo di esponenziazione modulare Diversi siti su Internet trattano questo algoritmo ad esempio [SI0] Per una sua esauriente esposizione e comprensione si rimanda allrsquoesemplare articolo di C Pomerance [Pom] Nel caso poi in cui il primo p egrave della forma 8k + 5 le soluzioni della congruenza sono le seguenti [Cip]

1z equiv 21 8

3+p

Q middot ( 41

2minusp

+ 1 - ( 41

2minusp

- 1 ) middot 41minusp

Q ) ( mod p ) 2z = p ndash 1z

Ovvero 1z equiv sdot21

sdot+1kQ ( )121212 )12(12 +++ sdotminusminus+ kkk Q ( mod p ) 2z = p ndash 1z

In questo caso llsquoalgoritmo della esponenziazione modulare saragrave usato piugrave volte Anche per un primo p della forma 4k +1 esiste una formula [Cip] per il valore risolutivo di z previo il calcolo di un qualsiasi non residuo quadratico di p Per la sua espressione si rimanda a [Cip]Dic] Ersquo perograve da chiarire che lrsquoimpiego di tale formula riportata comunque qui di seguito risulta conveniente solo se posto p

sotto la forma p = h r2 + 1 lrsquoesponente r egrave di valore non grande

equivz sdotminus

+minus+

2

221

2

1

r

pr

r

Qsum

minus

=minus+

minusminus

minus

12

0 2)1)(12(

2)1(

1

1

r

r

r

sps

ps

nr

Q )(mod p

dove nr egrave un qualsiasi non residuo quadratico di p e r2 egrave la massima potenza di 2 che divide p ndash 1

3

In questo articolo si vuole mostrare un algoritmo che si basa sullrsquoutilizzo delle Sequenze di Lucas per la risoluzione della congruenza z 2 equiv Q (mod p) con p primo di qualsiasi forma Prima perograve di entrare in merito allrsquoalgoritmo egrave opportuno dare qualche cenno nei riguardi di queste sequenze Sequenze di Lucas [Rie] [Rib] [SI3] Detti P Q due numeri interi diversi da zero si consideri la forma quadratica x 2 + Pmiddotx + Q = 0 che prende il nome di equazione caratteristica il suo discriminante egrave QPD 42 minus= Si prendano in esame due successioni o sequenze di numeri interi una il cui termine generico saragrave indicato con U(k) lrsquoaltra con il termine generico V(k) dove k = 012 3 hellip egrave lrsquoindice che individua la posizione dei numeri U e V nella successione I primi due termini relativi alla sequenza dei numeri U(k) siano U(0) = 0 U(1) = 1 e per la sequenza dei numeri V(k) V(0) = 2 V(1) = P inoltre per ogni k ge 2 si ponga U(k) = PmiddotU(k -1) ndash QmiddotU(k-2) (1) V(k) = PmiddotV(k -1) ndash QmiddotV(k-2) (2) La sequenza dei numeri V(k) prende il nome di sequenza associata (companion) a quella dei numeri U(k) In un precedente articolo dedicato tali tipi di sequenze [Teo] si era accennato a queste sequenze numeriche allora si erano illustrate solo due particolari sequenze tra loro associate e precisamente la successione dei Numeri di Fibonacci e la successione dei Numeri di Lucas che si ottengono con le regole generali indicate sopra e ponendo P = 1 e Q = ndash1 Qui nellrsquoutilizzo delle sequenze di Lucas per trovare le soluzioni della congruenza z 2 equiv Q (mod p) se esistono dobbiamo considerarle in modo piugrave generale vale a dire con il termine noto qualsiasi Q della congruenza pari al valore Q dellrsquoequazione caratteristica e con un opportuno P che puograve avere valore diverso da 1 e del quale parleremo piugrave avanti Algoritmo per la risoluzione di z 2 equiv Q (mod p) La possibilitagrave di impiegare le sequenze di Lucas per risolvere la congruenza si basa su quanto segue [Rie] [Rob] ldquoData la congruenza z 2 equiv Q (mod p) se essa egrave risolubile prese in considerazione le due sequenze di Lucas U(k) e V(k) derivate dallrsquoequazione caratteristica x 2 + Pmiddotx + LQ = 0 con LQ = Q e P scelto

in modo che 2P ndash 4middotQ sia un non residuo quadratico di p si dimostra che i valori plusmn 2

)(kV (mod p)

con indice k = 2

1+p sono le soluzioni cercate della congruenza

Per quanto riguarda i valori U(k) si trova che per tale indice il valore U(k) risulta congruo a 0 (mod p) cioegrave U(k) equiv 0 (mod p) rdquo La condizione che il valore U(k) equiv 0 (mod p) puograve essere presa come provanon assoluta comunque che i

valori trovati plusmn 2

)(kV (mod p) con indice k =

21+p

sono effettivamente validi

Vediamo ora quali sono i diversi passi con cui procedere per poter risolvere efficacemente la congruenza a) ndash prima di introdurre il numero p si deve controllare che esso sia effettivamente un numero primo b) ndash si deve verificare che q e p qualora sia q gt 2p siano primi fra loro c) ndash si deve appurare quindi che la congruenza ammette soluzioni si dimostra [Tch][Cip][Hur] che

essa ha due soluzioni 1z e 2z = p ndash 1z se Q egrave residuo quadratico di p vale a dire se Q 21minusp

equiv +1 (mod p)

se Q risulta un non residuo quadratico di p cioegrave se Q 21minusp

equiv ndash1 (mod p) la congruenza non ha soluzioni e la ricerca ha termine

4

La verifica che il numero Q sia residuo quadratico o meno di p viene effettuata calcolando il simbolo di Jacobi [Cip] [Tch] [SI1] [SI2] che in questo caso essendo p primo coincide con il simbolo di Legendre

ed egrave indicato come segue ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

Si ha pertanto ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= Q 21minusp

(mod p) e quindi se ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

equiv +1 Q egrave

residuo quadratico di p se ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

equiv ndash1 Q egrave non residuo quadratico di p

d) ndash si deve poi trovare un opportuno minimo valore di P tale per cui D = P 2 ndash 4middotQ sia un non

residuo quadratico di p cioegrave ⎟⎟⎠

⎞⎜⎜⎝

⎛pD equiv ndash1 (mod p)

e) ndash effettuati questi calcoli occorre trovare un valido algoritmo per calcolare il valore plusmn 2

)(kV (mod p)

dove k = 2

1+p utilizzando perograve formule diverse dalle (1) e (2) in quanto con esse si dovrebbero calcolare

tutti i valori di U e di V precedenti il valore V ( 2

1+p ) il che come giagrave appurato nellrsquoarticolo citato

allungherebbe di molto il tempo di esecuzione Il programma scritto in linguaggio Qbasic riportato nellrsquoAllegato 1 comprende i vari punti sotto elencati ad esclusione del punto a) ciascuno dedicato a sviluppare algoritmi preposti a risolverli Si elencano qui di seguito i diversi algoritmi che devono essere preventivamente utilizzati nel programma prima di arrivare a quello di cui al punto e) Punto a) - egrave opportuno controllare preventivamente che il numero p sia effettivamente primo solo se p egrave primo si procederagrave ad introdurlo si prosegue quindi nella costruzione dellrsquoalgoritmo per soddisfare quanto richiesto al punto b) Punto b) - per verificare che il termine noto Q ed il modulo p siano primi tra loro si controlla che il loro Massimo Comun Divisore (mcd) abbia valore 1 Si puograve perograve evitare il calcolo del (mcd ) anche se non oneroso osservando che nellrsquoeffettuare al punto c) il calcolo del simbolo di Jacobi se si trovasse per tale simbolo il valore 0 (zero) ciograve indicherebbe che i numeri Q e p non sono primi fra loro

Punto c) - per trovare il valore del simbolo di Jacobi ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

non conviene procedere con il metodo ovvio

di esponenziazione modulare per calcolare il valore Q 21minusp

(mod p) ma con un algoritmo alternativo che consente di arrivare al risultato molto piugrave velocemente Questo algoritmo si basa sulle cinque seguenti proprietagrave e relazioni c1) c2) c3) c4) c5) attinenti il simbolo di Jacobi [Cip] [SI1[SI2]

c1 ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= (-1 ) 21minusQ

21minusp

⎟⎟⎠

⎞⎜⎜⎝

⎛Qp

c2 ⎟⎟⎠

⎞⎜⎜⎝

⎛p2

= (-1) 812 minusp

c3 ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= ⎟⎟⎠

⎞⎜⎜⎝

⎛pr

se Q equiv r ( mod p) c4 ⎟⎟⎠

⎞⎜⎜⎝

⎛p1

= 1 c5 ⎟⎟⎠

⎞⎜⎜⎝

⎛ minusp1

= (-1 ) 21minusp

Punto d) - per la ricerca dellrsquo appropriato minimo valore di P si sfrutta lo stesso algoritmo di cui al punto c) aggiungendo tuttavia nel programma da realizzare opportune istruzioni per tenere conto che occorreragrave ricercare il valore di P tramite anche diverse iterazioni da effettuarsi sullrsquoalgoritmo stesso Punto e) - Oggetto principale del presente articolo egrave quello di illustrare un algoritmo atto al calcolo rapido di un qualsiasi valore V(k) (mod p) della sequenza di Lucas relativa ai suddetti valori di Q e di P In

particolare si deve predisporre un efficiente algoritmo relativo al calcolo di plusmn2

)(kV (mod p) per un indice

5

k = 2

1+p Non essendo opportuno come giagrave accennato ricorrere allrsquouso delle relazioni (1) e (2) egrave necessario

rivolgere lrsquoattenzione ad altre formule relative ai termini U(k) e V(k) Sussistono in effetti le seguenti relazioni [Rib] [SI3] tra i valori delle due sequenze U(2middotk) = U (k)middotV(k) (3) V(2middotk) = V(k) 2 ndash 2middotQ k (4) 2middotU(2middotk+1) = U(2middotk)middotV(1) + V(2k)middotU(1) (5) 2middotV(2middotk+1) = V(2middotk)middotV(1) +DmiddotU(2middotk)middotU(1) (6) dove con k si intende il generico indice Poicheacute U(1) = 1 e V(1) = P tenendo conto delle relazioni (3) e (4 le due relazioni (5) e (6) si possono scrivere come segue 2middotU(2middotk+1) = P middot U (k) middot V(k) + V(k) 2 ndash 2middotQ k (7) 2middotV(2middotk+1) = P middot V(k) 2 + D middot U (k) middot V(k) ndash 2middotPmiddotQ k (8) dove ricordiamo D =P 2 ndash 4middotQ Dalle suddette relazioni si constata che valori di U(k) e V(k) ricavati dalle (3) e (4) relativi ad un generico indice pari 2middotk e dalle (7) e (8) relativi ad un generico indice dispari 2middotk +1 dipendono unicamente dallrsquoindice k e dai valori assunti da U e da V relativi a tale indice k Dallrsquoattenta osservazione dei valori degli indici riportati nelle suddette formule il calcolo dei valori U( sk ) e V( sk ) di un indice prefissato sk puograve essere eseguito con efficacia previa la realizzazione di una adeguata e limitata successione di indici k costruita con le seguenti regole

1) partendo dallrsquoindice sk che interessa il successivo indice da trovare egrave il seguente

1minussk =2

sk se sk egrave di valore pari 1minussk =

21minussk

se sk egrave di valore dispari

2) gli ulteriori indici 2minussk 3minussk helliphelliphelliphellip 2k 1k 0k della successione si trovano applicando a ciascuno di loro lrsquooperazione del tipo di cui al punto 1)

Si noti che tali indici assumono valori sempre piugrave piccoli fino ad arrivare allrsquoindice 0k di valore 1 Cosigrave operando si arriveragrave ad individuare tutti i valori numerici degli indici della successione sino allrsquoultimo

0k che ha valore 1 qualsiasi sia il valore dellrsquoindice sk di partenza Ersquo facile vedere poi che la successione degli indici da trovare non considerando pertanto lrsquoindice sk che egrave

noto egrave costituita solo da s = ⎥⎦

⎥⎢⎣

⎢2

)(Log

kLog s indici

Una volta ottenuta e opportunamente memorizzata tale successione di indici si devono considerare le formule (3) (4) (7) e (8) le quali prendendo in considerazione la successione degli indici possono essere scritte piugrave opportunamente nel seguente modo mettendo cosigrave in evidenza la loro natura (essenza ) iterativa

U (k i ) = U (k 1minusi ) middot V(k 1minusi ) (3b)

V (k i ) = V(k 1minusi ) 2 ndash 2 middot Q 1minusik (4b)

2 middot U (k i ) = P middot U (k 1minusi ) middot V(k 1minusi ) + V(k 1minusi ) 2 ndash 2 middot Q 1minusik (7b)

2 middot V (k i ) = P middot V(k 1minusi ) 2 + D middotU (k 1minusi ) middot V(k 1minusi ) ndash 2 middot P middot Q 1minusik (8b) Si osservi che dette formule danno luogo ad un calcolo di tipo iterativo il calcolo di U(k i ) e di V(k i ) puograve essere effettuato infatti con i valori di U(k 1minusi ) e di V(k 1minusi ) trovati nellrsquoiterazione precedente col valore dellrsquoindice k i anchrsquoesso giagrave trovato e con termine noto Q e dei valori P e D giagrave calcolati

6

Si dovranno poi prendere in considerazione le formule (3b ) e (4b) se lrsquoindice k i egrave di valore pari utilizzare invece le formule (7b) e(8b) se esso egrave di valore dispari Si puograve arrivare cosigrave al calcolo di U( sk ) e

di V( sk ) attraverso un ciclo limitato di s = ⎥⎦

⎥⎢⎣

⎢2

)(Log

kLog s iterazioni utilizzando gli indici trovati e

opportunamente memorizzati della successione Ersquo importante sottolineare che tutti i calcoli da effettuare sulle suddette formule sono da eseguirsi modulo p Ciograve significa che ogni risultato R di una qualsiasi operazione aritmetica qualora superi il valore p non puograve essere utilizzato come tale per una ulteriore operazione aritmetica al suo posto nel proseguimento dei calcoli deve essere utilizzato il resto r ottenuto dalla divisione di R per p Tutto ciograve viene indicato dicendo che le operazione aritmetiche sono effettuate ldquo(mod p)rdquo ed il valore r prende il nome di residuo modulo p di R Nel nostro caso per trovare lrsquoopportuna successione di indici di

valore numerico decrescente si deve partire dallrsquoindice sk =2

1+p

Avendo a disposizione la successione desiderata degli indici percheacute preventivamente memorizzata si parta ora dallrsquoindice k 0 = 1 e dai valori conosciuti di U(k 0 ) =1 e di V(k 0 ) = P risalendo poi passo passo tenendo conto dei particolari indici trovati della successione di valore sempre piugrave grande si egrave in grado di calcolare con le formule a disposizione i valori di U(k i ) e di V(k i ) relativi allrsquoindice k i utilizzando unicamente i valori di U(k 1minusi ) di V(k 1minusi ) e dellrsquoindice k 1minusi oltre naturalmente i valori del coefficiente noto Q e dei valori di P e D Il calcolo di U(k i ) e di V(k i ) potragrave quindi essere effettuato con i valori di U(k 1minusi ) e di V(k 1minusi ) giagrave trovati nellrsquoiterazione precedente dellrsquoindice k i preventivamente calcolato e dei termini noti Q P e D Si dovranno poi prendere come giagrave detto in considerazione le formule (3b) e (4b) se lrsquoindice k i egrave di valore pari si dovranno invece utilizzare le formule (7b) e(8b) se esso egrave di valore dispari

Pertanto attraverso il calcolo di un numero limitato di iterazioni pari a ⎥⎦

⎥⎢⎣

⎢2Log

Logks con sk = 2

1+p partendo

dallrsquoindice k 0 = 1 si possono trovare i valori di U( sk ) e di V( sk ) desiderati Esempio Vediamo di chiarire meglio tutto quanto finora esposto con un esempio molto semplice ma significativo I risultati qui esposti sono stati trovati con il programma il cui listato egrave riportato in Allegato 1 del presente articolo Si voglia risolvere la semplice congruenza z 2 equiv ndash 47 (mod 1427) dove Q = ndash 47 e p = 1427 Si sia giagrave verificato che il numero 1427 egrave primo per cui q e p sono primi fra loro essendo q lt p Si deve vedere ora se la congruenza egrave risolubile o meno calcolando il valore del simbolo di Jacobi

⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= ⎟⎠⎞

⎜⎝⎛ minus1427

47

Piugrave che effettuare il calcolo diretto cercando il valore assunto da Q 21minusp

= 10 211427minus

(mod 1427) con lrsquoalgoritmo di esponenziazione modulare egrave conveniente utilizzare un algoritmo che utilizzi le formule c1 c2 c3 c4 e c5 sopra riportate con le quali si puograve realizzare un piugrave efficiente e veloce algoritmo di calcolo Ad esempio con i presenti valori impiegando il primo algoritmo sono necessarie 9 iterazioni con il secondo sono necessarie solo 4 iterazioni In generale lrsquouso del secondo algoritmo egrave tanto piugrave conveniente quanto piugrave grandi sono i valori di p Se il

valore di ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

egrave ndash1 la congruenza non egrave risolubile e quindi la ricerca termina Tornando alla congruenza

z 2 equiv ndash 47 (mod 1427) ed al relativo Simbolo di Jacobi = ⎟⎠⎞

⎜⎝⎛ minus1427

47 si ottiene per esso un valore + 1 per cui

egrave lecito proseguire nella risoluzione della congruenza

7

Proseguendo si deve trovare ora il minimo valore di P tale per cui D = P 2 ndash 4Q sia un non residuo quadratico di P Partendo con un valore di P = 1 si prosegue eventualmente con P =2 3 4 hellip

Ci si ferma nella ricerca allorcheacute il simbolo di Jacobi ⎟⎟⎠

⎞⎜⎜⎝

⎛ minusp

QP 4 risulta = ndash1

Utilizzando pertanto lo stesso algoritmo usato per il calcolo del simbolo di Jacobi partendo da un valore P = 1 dopo un numero limitato di iterazioni (in questo esempio bastano 3 iterazioni) si trova che per

P = 3 e quindi per D = 23 ndash 4middot (ndash 47) = 197 il simbolo di Jacobi ⎟⎠⎞

⎜⎝⎛1427197

vale ndash1 Applicando quanto

richiesto al punto e ) le formule (3bis) (4bis) (7bis) e (8bis) con i valori Q = ndash 47 P = 3 e D = 197 diventano per questo esempio le seguenti U(k i ) = U (k 1minusi )middotV(k 1minusi ) (3b)

V(k i ) = V(k 1minusi ) 2 ndash 2middot(- 47) 1minusik (4b)

2middotU(k i ) = 3middotU (k 1minusi )middotV(k 1minusi ) + V(k 1minusi ) 2 ndash 2middot(- 47) 1minusik (7b)

2middotV(k i ) = 3middotV(k 1minusi ) 2 + 197middotU (k 1minusi )middotV(k 1minusi ) ndash 2middot3middot(- 47) 1minusik (8b)

tramite le quali con un ciclo iterativo di operazioni (modulo p) si deve calcolare il valore di

2)( skV

(mod p) per sk = 2

1+p dove p = 1427 Il numero di iterazioni saragrave pari a ⎥

⎥⎢⎣

⎢2

)(Log

kLog s = 9

Vediamo ora di trovare la successione di indici k per arrivare al calcolo di V ⎟⎠⎞

⎜⎝⎛ +

211427

= V (714)

Innanzitutto la successione incluso lrsquoindice iniziale noto sk = 714 sino allrsquo indice k 0 = 1 egrave composta

da s +1 indici dove s = ⎥⎦

⎥⎢⎣

⎢2

714Log

Log = 9 Con le regole citate partendo da sk = 9k =

211427 +

= 714 si

possono calcolare gli altri valori decrescenti dei successivi indici k poicheacute sk egrave pari si ottiene 1minussk =

= 8k = 2

714 = 357 che essendo dispari daragrave luogo a sua volta ad un indice 2minussk = 7k di valore

21357 minus

=

= 178 Questo indice di valore pari daragrave luogo allrsquoindice 3minussk = 6k = 2

178 = 89 proseguendo con il

calcolo dei successivi indici si otterranno i seguenti valori

k 5 = 2

189 minus = 44 k 4 =

244

= 22 3k =222

= 11 2k = 2

111minus = 5 1k =

215minus

= 2 k 0 = 22

= 1

si ha pertanto seguente successione limitata di indici di valore numerico decrescente sia pari che dispari k 9 = 714 k 8 = 357 k 7 = 178 k 6 = 89 k 5 = 44 k 4 = 22 k 3 = 11 k 2 = 5 k1 = 2 k 0 = 1

8

Sempre per lrsquoesempio riportato si puograve costituire cosigrave la seguente tabella esplicativa

iterazione Passaggio indici Formule U (k 1minusi ) U (k i ) V(k 1minusi ) V (k i )

d a k 1minusi a k i da usare

1 a k 0 = 1 k 1 = 2 (3b) e (4b) U(1) U(2) V(1) V(2)

2 a k 1 = 2 k 2 = 5 (7b) e (8b) U(2) U(5) V (2) V(5)

3 a k 2 = 5 k 3 = 11 (7b) e (8b) U(5) U(11) V (5) V(11)

4 a k 3 = 11 k 4 = 22 (3b) e (4b) U(11) U (22) V(11) V(22)

5 a k 4 = 22 k 5 = 44 (3b) e (4b) U(22) U (44) V22) V(44)

6 a k 5 = 44 k 6 = 89 (7b) e (8b) U(44) U (89) V(44) V(89)

7 a k 6 = 89 k 7 = 178 (3b) e (4b) U(89) U (178) V(89) V(178)

8 a k 7 = 178 k 8 = 357 (7b) e (8b) U(178) U (357) V(178) V(357)

9 a k 8 = 357 k 9 = 714 (3b) e (4b) U(357) U (714) V(357) V(714)

Si ribadisce ancora una volta che tutti i calcoli per trovare valori di U e di V sono da effettuare in aritmetica modulo p (mod p) Ciograve comporta che tutti i valori numerici dei diversi U(k) e V(k) trovati non saranno mai superiori a p Per il calcolo dellrsquooperazione di elevazione a potenza Q k (mod p) che compare nelle formule si puograve fare ricorso allrsquo algoritmo della esponenziazione modulare Osservando perograve la particolare successione di indici ottenuti si puograve evitare tale tipo di algoritmo che pur efficiente allungherebbe sia il numero di istruzioni nel programma sia anche i tempi do calcolo rispetto ad un algoritmo basato sostanzialmente sulla seguente considerazione si osservi che passando da una iterazione a quella successiva

ikQ risulta essere pari a ( )21minusikQ se lrsquoindice 1minusik egrave un numero pari

ikQ risulta essere pari a ( )21minusikQ middot Q se lrsquoindice 1minusik egrave un numero dispari

Naturalmente i suddetti valori devono essere sempre calcolati (mod p ) Per completezza si riportano qui di seguito partendo dai valori iniziali di U e di V i successivi valori numerici di U e di V trovati in ciascuna iterazione (it) valori iniziali U = 1 V = P = 3 1 a it U(2) = 3 V(2) = 103 2 a it U(5) = 705 V(5) = 1194 3 a it U(11) = 926 V(11) = 581 4 a it U(22) = 27 V(22) = 1218 5 a it U(44) = 65 V(44) = 892 6 a it U(89) = 582 V(89) = 726 7 a it U(178) = 140 V(178) = 597 8 a it U(357) = 0 V(357) = 885 9 a it U(714) = 0 V(714) = 1328

il risultato V(714) = 1328 della 9 a e ultima iterazione egrave il valore cercato V ⎟⎠⎞

⎜⎝⎛ +

21p

= V ⎟⎠⎞

⎜⎝⎛ +

211427

= = = =

= V(714) = 1328 che diviso per 2 da luogo ad una delle soluzioni della congruenza 1z = 2

)714(V =

21328

=

= 664 Lrsquoaltro valore della congruenza egrave immediato 2z = ndash 664 equiv p ndash 1z = 763 Si noti il valore 0 di

2)714(U

Egrave il caso di ricordare ancora una volta che tutti i valori numerici sono calcolati (mod p)

9

Risoluzione della Congruenza z 2 equiv Q (mod p) con valori di Q e p grandi Ersquo necessario a questo punto precisare quanto segue un calcolo per la congruenza relativa ad un modulo p piccolo come quello dellrsquoesempio sopra illustrato (p = 1427) potrebbe essere sviluppato anche piugrave opportunamente con un programma di calcolo con lrsquoalgoritmo di tipo esaustivo composto da poche istruzioni

formanti un ciclo di operazioni ripetuto al massimo 2p

Ciograve egrave vero per moduli p abbastanza piccoli ma si puograve giagrave constatare che nel risolvere una congruenza il cui modulo p sia un primo costituito da solo 8 cifre la differenza dei tempi di calcolo comincia a farsi sentire Ad esempio risolvendo la seguente congruenza z 2 equiv 3 (mod 85225897) su di uno stesso calcolatore e con lrsquoutilizzo di un medesimo linguaggio (Qbasic) si sono ottenuti i seguenti tempi di risoluzione - con algoritmo esaustivo un tempo di 31 secondi - con algoritmo illustrato un tempo praticamente immediato

Il calcolo in questo caso egrave stato effettuato tramite lrsquoesecuzione di un programma realizzato e scritto in linguaggio Qbasic relativo alla risoluzione di una qualsiasi congruenza quadratica avente valori di Q e di p non grandi tali cioegrave di poter risolvere la congruenza in modo esatto con lrsquoutilizzo della sola aritmetica in doppia precisione disponibile sul nel software utilizzato Pertanto nel nostre caso occorre che Q sia composto da non piugrave di 15 cifre e p da non piugrave di 7 cifre Il listato del programma egrave riportato nellrsquo Allegato 1 Per moduli p anche non eccessivamente grandi costituiti da appena 16 cifre si egrave potuto constatare tramite apposito programma a precisione multipla che mentre il tempo impiegato per conoscere se la congruenza egrave risolubile e in tal caso calcolarne le soluzioni egrave praticamente immediato con un programma esaustivo naturalmente estrapolando i tempi ottenuti per moduli p piccoli ( p con 7 cifre e 8 cifre) il tempo di calcolo sarebbe maggiore ai 10 anni Per moduli p con 20 cifre si potrebbe avere addirittura un tempo di verifica e calcolo superiore ai 50 mila anni Che sia importante realizzare un algoritmo e di conseguenza un programma con cui risolvere in tempi brevi le congruenze con valori per Q per p grandi risulta evidente non solo da un punto di vista euristico ma anche quando si deve effettuare la scomposizione in fattori di un numero composto grande Infatti in uno dei piugrave moderni ed efficienti metodi di fattorizzazione di numeri grandi vale a dire il metodo del ldquoCrivello Quadraticordquo (Quadratic Sieve) egrave indispensabile risolvere preliminarmente diverse congruenze quadratiche anche con moduli primi di discrete dimensioni [Kob] [Bre] [SI4 [SI5] [SI6] Inoltre pure nel il campo della crittografia risulta necessario poter risolvere questo tipo di congruenza (vedi piugrave avanti il paragrafo delle applicazioni tecniche) Pertanto si egrave realizzato un ulteriore programma sempre in linguaggio Qbasic dedicato a valori per p e per Q che possono avere valori grandi composti ciascuno anche da diverse decine di cifre In effetti esso egrave atto a risolvere una qualsiasi congruenza quadratica avente termine noto Q sia positivo che negativo costituito sino a qualche centinaia di cifre e con modulo p primo ldquolimitatordquo composto al massimo da 125 cifre Questo limite egrave determinato dallrsquoaver utilizzato nelle istruzioni un solo array bidimensionale (una matrice puograve essere composta al massimo da 8000 elementi nel software Qbasic) per incamerare e memorizzare tutti gli

appositi indici k (da sk = 2

1+p a 0k = 1) trovati con le regole sopraesposte relativi ai valori U(k) e V(k)

In tale programma non essendo sufficienti i calcoli in doppia precisione relativi a tutte le operazioni aritmetiche presenti nel listato del programma mostrato in Allegato 1 le analoghe operazioni aritmetiche vengono effettuate compresa la divisione in aritmetica a precisione multipla Ciograve comporta lrsquoesattezza di tutti i calcoli su numeri grandi e sui risultati ottenuti a scapito perograve di una piugrave onerosa realizzazione del programma dato il grande numero di istruzioni e la loro maggiore complessitagrave necessarie allrsquoesecuzione delle varie operazioni aritmetiche Non si egrave ritenuto opportuno allegare al presente articolo per non appesantirlo troppo il listato del suddetto programma data la sua non indifferente lunghezza In una Tabella sotto riportata sono illustrati comunque alcuni risultati di esempi di risoluzione relativi a congruenze quadratiche ottenuti utilizzando il programma suddetto Nella penultima colonna della tabella egrave mostrato il tempo di calcolo richiesto con lrsquoalgoritmo illustrato Tal nellrsquoultima colonna egrave mostrato invece il tempo di calcolo necessario con lrsquoalgoritmo di tipo esaustivo Tes i valori con sono dedotti ovviamente per estrapolazione dai tempi ottenuti per moduli p di 7 e di 8 cifre Si noti che egrave impensabile intraprendere un calcolo esaustivo per risolvere qualsiasi congruenza quadratica avente per modulo un primo p anche di solo 16 cifre Per una piugrave facile lettura dei valori numerici essi sono stati separati in gruppi di 7 cifre decimali come del resto calcolati nel programma avendo utilizzato per le

10

operazioni aritmetiche la Base (Radix) 710 di numerazione anzicheacute la normale Base 110 Si fa osservare che ad un gruppo di 7 cifre in base 10 si fa corrispondere una singola cifra in aritmetica in Base 710 Considerazioni sulla congruenza z 2 equiv Q (mod n ) con n composto Finora si sono considerate congruenze aventi come moduli numeri primi p Per diversi algoritmi crittografici occorre trovare i valori che soddisfano una congruenza del tipo z 2 equiv Q (mod n ) con n composto dal prodotto di due numeri primi cioegrave n = 21 pp sdot con 1p e 2p numeri primi grandi costituiti ciascuno anche da piugrave di 150 cifre decimali Cosa si puograve dire riguardo ad un tale tipo di congruenza quadratica In generale la risoluzione di una congruenza quadratica con modulo composto presenta le stesse difficoltagrave del problema della fattorizzazione di un numero in quanto il primo passo per la sua eventuale risoluzione egrave quello di scomporre in fattori il modulo n

In questo specifico caso perograve si supponga di conoscere a priori i fattori 1p e 2p che compongono il modulo Si supponga anche che n e Q siano primi tra loro cioegrave che si abbia (Q n) = 1 dove con tale simbologia viene indicato il Massimo Comun Divisore fra Q ed n Condizione indispensabile percheacute la congruenza z 2 equiv Q (mod 21 pp sdot ) sia risolubile egrave che siano risolubili entrambe le due seguenti congruenze z 2 equiv Q (mod 1p ) e z 2 equiv Q (mod 2p ) In effetti se anche una sola delle due congruenze non risulta risolubile anche la congruenza con modulo n = 21 pp sdot non lo egrave [Tch] [Nag] Una volta risolte le due congruenze quadratiche rispettivamente con modulo 1p e modulo 2p ciascuna delle quali presenteragrave due valori numerici che la soddisfano si avranno disponibili 4 congruenze lineari z equiv 11z (mod 1p ) z equiv 12z (mod 1p ) relative alla congruenza con modulo 1p z equiv 21z (mod 2p ) z equiv 22z (mod 2p ) relative alla congruenza con modulo 2p con le quali si possono formare 22 distinti sistemi di congruenze composti ciascuno da 2 congruenze lineariSi tenga presente che in uno qualsiasi di questi 4 sistemi non devono mai comparire due congruenze lineari i cui termini noti siano le soluzioni di una stessa congruenza quadratica Ersquo ben noto che per trovare una soluzione atta a soddisfare un insieme di congruenze lineari bisogna far ricorso al Teorema cinese dei resti Per detto teorema si puograve fare riferimento ad una vasta bibliografia di cui si riportano solo alcuni riferimenti [Bar] [Niv] [Wag] relativi anche ad indirizzi di Siti Internet [SI4][SI5] Questo teorema ci assicura che dato un insieme di congruenze lineari se i vari moduli delle congruenze sono relativamente primi fra loro esiste un valore comune tale da soddisfare simultaneamente ognuna della congruenze Utilizzandolo nel nostro caso avremo che un generico valore dei 4 valori di z 2 equiv Q (mod n ) che la soddisfano puograve essere trovato tramite la seguente formula

nz = iz1 middot 1b middot1p

n + iz2 middot 2b middot

2pn

con i = 12

dove ogni ib si ricava risolvendo la congruenza lineare ip

nmiddot ib equiv 1 ( mod ip )

Alcune applicazioni tecniche Vi sono delle interessanti applicazioni tecniche in cui vengono implicati e utilizzati argomenti trattati nel presente articolo specie nel campo delle telecomunicazioni e della crittografia Ci limiteremo ad elencare qui alcune di quelli indicati in [Shr] e in [Schn] Per i residui quadratici - Applicazione di successioni di residui quadratici nella progettazione riguardante unrsquoampia diffusione di onde sonore negli ambienti per migliorare la qualitagrave acustica - Possibili applicazioni nella copertura radar e sonar nella riduzione del rumore - Applicazione per la riduzione delle interferenze in particolare riguardo al ldquojammingrdquo nelle comunicazioni

11

via radio in cui egrave raccomandato lrsquouso di larghi spettri in effetti nellrsquoutilizzo di una stessa banda di frequenze fra piugrave utenti si puograve dimostrare che lrsquoattribuzione di particolari successioni di residui quadratici da assegnare ad ognuno di loro permette di ridurre al minimo le interferenze fra le varie trasmissioni pur essendo esse contemporanee Per le congruenze quadratiche Oltre al loro giagrave summenzionato utilizzo in uno dei piugrave efficienti metodi di scomposizione in fattori di numeri grandi (Quadratic Sieve Method) altre applicazioni riguardano soprattutto il campo della crittografia abbinata al campo delle telecomunicazioni quali ad esempio ndash il metodo crittografico di Rabin [Schn] vedi riquadro ndash il metodo di Ong ndash Shnorr- Shamir [Schn] relativo alla firma digitale ndash il metodo di zero ndash knowledge di Feige- Fiat - Shamir [Schn] dedicato allrsquorsquoautenticazione della firma

digitale Per le Sequenze di Lucas vi sono applicazioni che interessano sia crittosistemi a chiave pubblica come ad esempio il ldquoLUC Public Key Encriptionrdquo) valido quanto il crittosistema RSA sia test di primalitagrave Riguardo a questrsquoultimo argomento egrave da mettere in evidenza infatti che la ricerca e lrsquoindividuazione dei piugrave grandi numeri primi finora scoperti si egrave potuta realizzare grazie proprio allrsquoimpiego di dette sequenze METODO di RABIN

Il messaggio M viene crittografato secondo la relazione C equiv 2M ( mod N ) dove N egrave un numero composto dal prodotto di due grandi primi 1p e 2p ciascuno costituito da parecchie decine di cifre in ricezione lrsquoutente la cui chiave pubblica egrave il numero N

quando riceve il messaggio criptato C egrave lrsquounico a poterlo decifrare utilizzando le sue due chiavi segrete 1p e 2p Esso perograve deve

disporre di un algoritmo veloce ed efficace per decrittare il messaggio secondo la relazione 2z equiv C ( mod N ) la cui risoluzione

puograve essere effettuata solo risolvendo prima le due congruenze 2z equiv C (mod 1p ) e 2z equiv C (mod 2p ) quindi col ricorso del Teorema dei Resti Cinese risolvendo il sistema di due congruenze lineari impieganti le soluzioni delle suddette congruenze Si

dimostra infatti che uno dei quattro valori di z trovati che soddisfano la congruenza 2z equiv C ( mod N ) risulta essere il messaggio originale M Ersquo da osservare perograve che sussiste lrsquoambiguitagrave della scelta del messaggio effettivo fra i quattro valori di z Se il messaggio originale egrave un normale testo in italiano (o comunque in unrsquoaltra lingua) allora saragrave facile scegliere fra i quattro valori di z quello corretto In generale sussiste la suddetta ambiguitagrave ----------------------------------------------------------------------------- Un possibile metodo comunque non molto efficiente per ovviare a ciograve potrebbe essere il seguente lrsquoutente a cui egrave destinato il messaggio mette a disposizione due chiavi pubbliche 1N = 1p middot 2p e 2N = 3p middot 4p avendo come sue chiavi segrete i quattro

numeri primi 1p 2p 3p e 4p Esso riceveragrave pertanto due messaggi criptati 1C equiv 2M (mod 1N ) e 2C equiv 2M (mod

2N ) che decritteragrave risolvendo le due congruenze quadratiche 2z equiv 1C (mod 1N ) e 2z equiv 2C (mod 2N ) Si avranno cosigrave disponibili quattro valori risolutivi per la prima congruenza ed altri quattro per la seconda Osservando queste otto soluzioni solo due in generale saranno identiche una estratta fra le quattro della prima congruenza lrsquoaltra estratta dalle altre quattro relative alla seconda congruenza Saragrave pertanto questa soluzione comune il messaggio originale M Nota sui residui Occorre tener conto che sui residui ottenuti si possono effettuare se necessarie le seguenti operazioni lecite in aritmetica modulare 1 ) se rn lt 0 egrave il residuo negativo (mod p ) di un valore numerico negativo ndashR i molti casi risulta preferibile sostituire questo valore negativo rn con lrsquoequivalente (piugrave prossimo a 0) residuo rp positivo ( mod p) di ndashR che risulta essere rp = p - |rn| Tale sostituzione risulta indispensabile allorcheacute si devono effettuare i calcoli in aritmetica a precisione multipla su grandi valori numerici non sono trattabili neanche con lrsquoaritmetica la doppia precisione disponibile sul calcolatore nel linguaggio utilizzato 2) detto rd il residuo dispari di R ( mod p) per ottenere un intero quale residuo di rd 2 si calcola il

valore 2

prd + che saragrave senzrsquoaltro intero essendo pgt2 dispari

Questa operazione deve essere effettuata ad esempio quando nelle formule (7) e (8) utilizzate per il calcolo del residuo di 2middotU(2k+1) e di 2middotV(2k+1) il risultato dei calcoli (mod p) egrave un numero dispari dovendo trovare invece il residuo di U(2k+1) o di V(2k+1)

12

RIFERIMENTI [Bar] - GC Barozzi Aritmetica un approccio computazionale Zanichelli Bologna 1991 [Bre] - DMBressoud Factorization and Primality Testing Springer-Verlag New York 1989 [Cip] - MCipolla Teoria dei numeri Analisi Indeterminata in Enciclopedia delle Matematiche Elementari volI parte I Cap IV ndash Parte seconda - U Hoepli editore Milano [Dic] - L E Dickson ndash History of the Theory of Numbers Vol I ChapVII - Chelsea Publishing Company New York 1992 [Eul] - L Euler Eleacutemens drsquoAlgegravebre ndashTome second Analise Indetermineacutee Bachelier Librairie pour le Matheacutematiques Paris 1807 [Hur] - A Hurwitz ndash N Kritikos Lectures on Number Theory Springer-Verlag New York 1986 [Kob] - N Kobliz A Course in Number Theory and Criptography Springer-Verlag New York 1994 [Kra] - EKranakis Primality and Cryptography JWiley amp Sons 1986 [Lan] - E Landau Elementary Number Theory Chelsea Publishing Company New York 1966 Nag] - T Nagell Introduction to Number Theory Chelsea Publishing Company New York 1981 [Niv] - I Niven - HSZuckerman An Introduction to the Theory of Numbers JWiley amp Sons 1980 [Old] - CD Olds Frazioni continue Collana di Matematica Moderna ndash vol MM5 Zanichelli Bologna 1970 [Pom] - C Pomerance Alla ricerca dei numeri primi Le Scienze - quaderni n14 marzo 1984 [Rib] - P Ribenboim The Book of Prime Number Records Springer-Verlag New York 1989 [Rie] H Riesel Prime Number and Computer Methods for Factorization Birkhaumluser Boston 1985 [Rob] - G Robin Algorithmique et cryptographie Mathematiques amp Applications vol ndeg 8 (1991) Ellipses ndash Edition Marketing [Sch] - MR Schroeder La Teoria dei Numeri franco muzio amp ceditore Padova 1986 [Schn] - B Schneider Applied Cryptography John Wiley amp SInc New York [Tch] - P L Tchebichef Teoria delle Congruenze E Loescher amp Cdeg Roma 1895 [Te1] - C Teodoro La Generazione della chiave privata nellrsquoalgoritmo crittografico RSA a chiave pubblica in ldquomatematicamenteit ndash sezione Applicazioni Ingegneriardquo [Te2] - C Teodoro Un metodo per il calcolo veloce dei numeri di Fibonacci e di Lucas La Comunicazione anno 2001 Vol XLX [Wag] - SWagon Guida a Matematica ( capitoli 8 e 9) McGraw ndashHill Libri Italia srl Milano 1995 Siti Internet [SI0] - httpaieecsumichedupeopleroundsWinter02SlidesLectureApril4pdf [SI1] - http164813169Enciklopedijamathmathjj026htm [SI2] - httpwwwmathswtedu~hazprob_setsnotesnode34html [SI3] - httpmathworldwolframcomLucasSequencehtml [SI4] - httpmathworldwolframcomQuadraticSievehtml [SI5] - httpwwwmathksuedumath511notesiqs2000htm [SI6] - httpnethzchstudentralbrunnTQShtml [SI7] - httpmathworldwolframcomChinese Remainder Theoremhtml [SI8] - httpwwwmathswtedu~hazprob_setsnotesnode25html

Vengono riportati nelle pagine seguenti

- alcuni esempi di calcolo per congruenze con valori di q e di p non grandi ottenuti utilizzando il programma riportato in ALLEGATO 1

- una Tabella riguardante diversi risultati di risoluzione di congruenze quadratiche presentanti valori di Q e di p grandi e quindi risolte con lrsquoimpiego di apposito programma utilizzante una aritmetica a precisione multipla - altri esempi di calcolo per congruenze presentanti anche valori di Q e di p grandi risolte utilizzando un apposito programma con aritmetica a precisione multipla

13

ESEMPI di risoluzione della congruenza )(mod2 pQz equiv con lrsquoutilizzo del programma in Allegato 1

ESEMPIO n1 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q876543 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p113 k5 = 57 k4 = 28 k3 = 14 k2 = 7 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 5 1 ^it U( 3 ) = 23 V( 3 ) = 95 2 ^it U( 7 ) = 23 V( 7 ) = 76 3 ^it U( 14 ) = 53 V( 14 ) = 96 4 ^it U( 28 ) = 3 V( 28 ) = 65 5 ^it U( 57 ) = 0 V( 57 ) = 11 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 876543 (mod 113 )SONO z1 = 62 z2 = 51 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-7723 che (z2^2 - Q) p =-7734 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

14

ESEMPIO n2 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -47 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 1427 k9 = 714 k8 = 357 k7 = 178 k6 = 89 k5 = 44 k4 = 22 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 103 2 ^it U( 5 ) = 705 V( 5 ) = 1194 3 ^it U( 11 ) = 926 V( 11 ) = 581 4 ^it U( 22 ) = 27 V( 22 ) = 1218 5 ^it U( 44 ) = 65 V( 44 ) = 892 6 ^it U( 89 ) = 582 V( 89 ) = 726 7 ^it U( 178 ) = 140 V( 178 ) = 597 8 ^it U( 357 ) = 0 V( 357 ) = 885 9 ^it U( 714 ) = 0 V( 714 ) = 1328 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-47 (mod 1427 ) SONO z1 = 664 z2 = 763 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 309 che (z2^2 - Q) p = 408 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

3

In questo articolo si vuole mostrare un algoritmo che si basa sullrsquoutilizzo delle Sequenze di Lucas per la risoluzione della congruenza z 2 equiv Q (mod p) con p primo di qualsiasi forma Prima perograve di entrare in merito allrsquoalgoritmo egrave opportuno dare qualche cenno nei riguardi di queste sequenze Sequenze di Lucas [Rie] [Rib] [SI3] Detti P Q due numeri interi diversi da zero si consideri la forma quadratica x 2 + Pmiddotx + Q = 0 che prende il nome di equazione caratteristica il suo discriminante egrave QPD 42 minus= Si prendano in esame due successioni o sequenze di numeri interi una il cui termine generico saragrave indicato con U(k) lrsquoaltra con il termine generico V(k) dove k = 012 3 hellip egrave lrsquoindice che individua la posizione dei numeri U e V nella successione I primi due termini relativi alla sequenza dei numeri U(k) siano U(0) = 0 U(1) = 1 e per la sequenza dei numeri V(k) V(0) = 2 V(1) = P inoltre per ogni k ge 2 si ponga U(k) = PmiddotU(k -1) ndash QmiddotU(k-2) (1) V(k) = PmiddotV(k -1) ndash QmiddotV(k-2) (2) La sequenza dei numeri V(k) prende il nome di sequenza associata (companion) a quella dei numeri U(k) In un precedente articolo dedicato tali tipi di sequenze [Teo] si era accennato a queste sequenze numeriche allora si erano illustrate solo due particolari sequenze tra loro associate e precisamente la successione dei Numeri di Fibonacci e la successione dei Numeri di Lucas che si ottengono con le regole generali indicate sopra e ponendo P = 1 e Q = ndash1 Qui nellrsquoutilizzo delle sequenze di Lucas per trovare le soluzioni della congruenza z 2 equiv Q (mod p) se esistono dobbiamo considerarle in modo piugrave generale vale a dire con il termine noto qualsiasi Q della congruenza pari al valore Q dellrsquoequazione caratteristica e con un opportuno P che puograve avere valore diverso da 1 e del quale parleremo piugrave avanti Algoritmo per la risoluzione di z 2 equiv Q (mod p) La possibilitagrave di impiegare le sequenze di Lucas per risolvere la congruenza si basa su quanto segue [Rie] [Rob] ldquoData la congruenza z 2 equiv Q (mod p) se essa egrave risolubile prese in considerazione le due sequenze di Lucas U(k) e V(k) derivate dallrsquoequazione caratteristica x 2 + Pmiddotx + LQ = 0 con LQ = Q e P scelto

in modo che 2P ndash 4middotQ sia un non residuo quadratico di p si dimostra che i valori plusmn 2

)(kV (mod p)

con indice k = 2

1+p sono le soluzioni cercate della congruenza

Per quanto riguarda i valori U(k) si trova che per tale indice il valore U(k) risulta congruo a 0 (mod p) cioegrave U(k) equiv 0 (mod p) rdquo La condizione che il valore U(k) equiv 0 (mod p) puograve essere presa come provanon assoluta comunque che i

valori trovati plusmn 2

)(kV (mod p) con indice k =

21+p

sono effettivamente validi

Vediamo ora quali sono i diversi passi con cui procedere per poter risolvere efficacemente la congruenza a) ndash prima di introdurre il numero p si deve controllare che esso sia effettivamente un numero primo b) ndash si deve verificare che q e p qualora sia q gt 2p siano primi fra loro c) ndash si deve appurare quindi che la congruenza ammette soluzioni si dimostra [Tch][Cip][Hur] che

essa ha due soluzioni 1z e 2z = p ndash 1z se Q egrave residuo quadratico di p vale a dire se Q 21minusp

equiv +1 (mod p)

se Q risulta un non residuo quadratico di p cioegrave se Q 21minusp

equiv ndash1 (mod p) la congruenza non ha soluzioni e la ricerca ha termine

4

La verifica che il numero Q sia residuo quadratico o meno di p viene effettuata calcolando il simbolo di Jacobi [Cip] [Tch] [SI1] [SI2] che in questo caso essendo p primo coincide con il simbolo di Legendre

ed egrave indicato come segue ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

Si ha pertanto ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= Q 21minusp

(mod p) e quindi se ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

equiv +1 Q egrave

residuo quadratico di p se ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

equiv ndash1 Q egrave non residuo quadratico di p

d) ndash si deve poi trovare un opportuno minimo valore di P tale per cui D = P 2 ndash 4middotQ sia un non

residuo quadratico di p cioegrave ⎟⎟⎠

⎞⎜⎜⎝

⎛pD equiv ndash1 (mod p)

e) ndash effettuati questi calcoli occorre trovare un valido algoritmo per calcolare il valore plusmn 2

)(kV (mod p)

dove k = 2

1+p utilizzando perograve formule diverse dalle (1) e (2) in quanto con esse si dovrebbero calcolare

tutti i valori di U e di V precedenti il valore V ( 2

1+p ) il che come giagrave appurato nellrsquoarticolo citato

allungherebbe di molto il tempo di esecuzione Il programma scritto in linguaggio Qbasic riportato nellrsquoAllegato 1 comprende i vari punti sotto elencati ad esclusione del punto a) ciascuno dedicato a sviluppare algoritmi preposti a risolverli Si elencano qui di seguito i diversi algoritmi che devono essere preventivamente utilizzati nel programma prima di arrivare a quello di cui al punto e) Punto a) - egrave opportuno controllare preventivamente che il numero p sia effettivamente primo solo se p egrave primo si procederagrave ad introdurlo si prosegue quindi nella costruzione dellrsquoalgoritmo per soddisfare quanto richiesto al punto b) Punto b) - per verificare che il termine noto Q ed il modulo p siano primi tra loro si controlla che il loro Massimo Comun Divisore (mcd) abbia valore 1 Si puograve perograve evitare il calcolo del (mcd ) anche se non oneroso osservando che nellrsquoeffettuare al punto c) il calcolo del simbolo di Jacobi se si trovasse per tale simbolo il valore 0 (zero) ciograve indicherebbe che i numeri Q e p non sono primi fra loro

Punto c) - per trovare il valore del simbolo di Jacobi ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

non conviene procedere con il metodo ovvio

di esponenziazione modulare per calcolare il valore Q 21minusp

(mod p) ma con un algoritmo alternativo che consente di arrivare al risultato molto piugrave velocemente Questo algoritmo si basa sulle cinque seguenti proprietagrave e relazioni c1) c2) c3) c4) c5) attinenti il simbolo di Jacobi [Cip] [SI1[SI2]

c1 ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= (-1 ) 21minusQ

21minusp

⎟⎟⎠

⎞⎜⎜⎝

⎛Qp

c2 ⎟⎟⎠

⎞⎜⎜⎝

⎛p2

= (-1) 812 minusp

c3 ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= ⎟⎟⎠

⎞⎜⎜⎝

⎛pr

se Q equiv r ( mod p) c4 ⎟⎟⎠

⎞⎜⎜⎝

⎛p1

= 1 c5 ⎟⎟⎠

⎞⎜⎜⎝

⎛ minusp1

= (-1 ) 21minusp

Punto d) - per la ricerca dellrsquo appropriato minimo valore di P si sfrutta lo stesso algoritmo di cui al punto c) aggiungendo tuttavia nel programma da realizzare opportune istruzioni per tenere conto che occorreragrave ricercare il valore di P tramite anche diverse iterazioni da effettuarsi sullrsquoalgoritmo stesso Punto e) - Oggetto principale del presente articolo egrave quello di illustrare un algoritmo atto al calcolo rapido di un qualsiasi valore V(k) (mod p) della sequenza di Lucas relativa ai suddetti valori di Q e di P In

particolare si deve predisporre un efficiente algoritmo relativo al calcolo di plusmn2

)(kV (mod p) per un indice

5

k = 2

1+p Non essendo opportuno come giagrave accennato ricorrere allrsquouso delle relazioni (1) e (2) egrave necessario

rivolgere lrsquoattenzione ad altre formule relative ai termini U(k) e V(k) Sussistono in effetti le seguenti relazioni [Rib] [SI3] tra i valori delle due sequenze U(2middotk) = U (k)middotV(k) (3) V(2middotk) = V(k) 2 ndash 2middotQ k (4) 2middotU(2middotk+1) = U(2middotk)middotV(1) + V(2k)middotU(1) (5) 2middotV(2middotk+1) = V(2middotk)middotV(1) +DmiddotU(2middotk)middotU(1) (6) dove con k si intende il generico indice Poicheacute U(1) = 1 e V(1) = P tenendo conto delle relazioni (3) e (4 le due relazioni (5) e (6) si possono scrivere come segue 2middotU(2middotk+1) = P middot U (k) middot V(k) + V(k) 2 ndash 2middotQ k (7) 2middotV(2middotk+1) = P middot V(k) 2 + D middot U (k) middot V(k) ndash 2middotPmiddotQ k (8) dove ricordiamo D =P 2 ndash 4middotQ Dalle suddette relazioni si constata che valori di U(k) e V(k) ricavati dalle (3) e (4) relativi ad un generico indice pari 2middotk e dalle (7) e (8) relativi ad un generico indice dispari 2middotk +1 dipendono unicamente dallrsquoindice k e dai valori assunti da U e da V relativi a tale indice k Dallrsquoattenta osservazione dei valori degli indici riportati nelle suddette formule il calcolo dei valori U( sk ) e V( sk ) di un indice prefissato sk puograve essere eseguito con efficacia previa la realizzazione di una adeguata e limitata successione di indici k costruita con le seguenti regole

1) partendo dallrsquoindice sk che interessa il successivo indice da trovare egrave il seguente

1minussk =2

sk se sk egrave di valore pari 1minussk =

21minussk

se sk egrave di valore dispari

2) gli ulteriori indici 2minussk 3minussk helliphelliphelliphellip 2k 1k 0k della successione si trovano applicando a ciascuno di loro lrsquooperazione del tipo di cui al punto 1)

Si noti che tali indici assumono valori sempre piugrave piccoli fino ad arrivare allrsquoindice 0k di valore 1 Cosigrave operando si arriveragrave ad individuare tutti i valori numerici degli indici della successione sino allrsquoultimo

0k che ha valore 1 qualsiasi sia il valore dellrsquoindice sk di partenza Ersquo facile vedere poi che la successione degli indici da trovare non considerando pertanto lrsquoindice sk che egrave

noto egrave costituita solo da s = ⎥⎦

⎥⎢⎣

⎢2

)(Log

kLog s indici

Una volta ottenuta e opportunamente memorizzata tale successione di indici si devono considerare le formule (3) (4) (7) e (8) le quali prendendo in considerazione la successione degli indici possono essere scritte piugrave opportunamente nel seguente modo mettendo cosigrave in evidenza la loro natura (essenza ) iterativa

U (k i ) = U (k 1minusi ) middot V(k 1minusi ) (3b)

V (k i ) = V(k 1minusi ) 2 ndash 2 middot Q 1minusik (4b)

2 middot U (k i ) = P middot U (k 1minusi ) middot V(k 1minusi ) + V(k 1minusi ) 2 ndash 2 middot Q 1minusik (7b)

2 middot V (k i ) = P middot V(k 1minusi ) 2 + D middotU (k 1minusi ) middot V(k 1minusi ) ndash 2 middot P middot Q 1minusik (8b) Si osservi che dette formule danno luogo ad un calcolo di tipo iterativo il calcolo di U(k i ) e di V(k i ) puograve essere effettuato infatti con i valori di U(k 1minusi ) e di V(k 1minusi ) trovati nellrsquoiterazione precedente col valore dellrsquoindice k i anchrsquoesso giagrave trovato e con termine noto Q e dei valori P e D giagrave calcolati

6

Si dovranno poi prendere in considerazione le formule (3b ) e (4b) se lrsquoindice k i egrave di valore pari utilizzare invece le formule (7b) e(8b) se esso egrave di valore dispari Si puograve arrivare cosigrave al calcolo di U( sk ) e

di V( sk ) attraverso un ciclo limitato di s = ⎥⎦

⎥⎢⎣

⎢2

)(Log

kLog s iterazioni utilizzando gli indici trovati e

opportunamente memorizzati della successione Ersquo importante sottolineare che tutti i calcoli da effettuare sulle suddette formule sono da eseguirsi modulo p Ciograve significa che ogni risultato R di una qualsiasi operazione aritmetica qualora superi il valore p non puograve essere utilizzato come tale per una ulteriore operazione aritmetica al suo posto nel proseguimento dei calcoli deve essere utilizzato il resto r ottenuto dalla divisione di R per p Tutto ciograve viene indicato dicendo che le operazione aritmetiche sono effettuate ldquo(mod p)rdquo ed il valore r prende il nome di residuo modulo p di R Nel nostro caso per trovare lrsquoopportuna successione di indici di

valore numerico decrescente si deve partire dallrsquoindice sk =2

1+p

Avendo a disposizione la successione desiderata degli indici percheacute preventivamente memorizzata si parta ora dallrsquoindice k 0 = 1 e dai valori conosciuti di U(k 0 ) =1 e di V(k 0 ) = P risalendo poi passo passo tenendo conto dei particolari indici trovati della successione di valore sempre piugrave grande si egrave in grado di calcolare con le formule a disposizione i valori di U(k i ) e di V(k i ) relativi allrsquoindice k i utilizzando unicamente i valori di U(k 1minusi ) di V(k 1minusi ) e dellrsquoindice k 1minusi oltre naturalmente i valori del coefficiente noto Q e dei valori di P e D Il calcolo di U(k i ) e di V(k i ) potragrave quindi essere effettuato con i valori di U(k 1minusi ) e di V(k 1minusi ) giagrave trovati nellrsquoiterazione precedente dellrsquoindice k i preventivamente calcolato e dei termini noti Q P e D Si dovranno poi prendere come giagrave detto in considerazione le formule (3b) e (4b) se lrsquoindice k i egrave di valore pari si dovranno invece utilizzare le formule (7b) e(8b) se esso egrave di valore dispari

Pertanto attraverso il calcolo di un numero limitato di iterazioni pari a ⎥⎦

⎥⎢⎣

⎢2Log

Logks con sk = 2

1+p partendo

dallrsquoindice k 0 = 1 si possono trovare i valori di U( sk ) e di V( sk ) desiderati Esempio Vediamo di chiarire meglio tutto quanto finora esposto con un esempio molto semplice ma significativo I risultati qui esposti sono stati trovati con il programma il cui listato egrave riportato in Allegato 1 del presente articolo Si voglia risolvere la semplice congruenza z 2 equiv ndash 47 (mod 1427) dove Q = ndash 47 e p = 1427 Si sia giagrave verificato che il numero 1427 egrave primo per cui q e p sono primi fra loro essendo q lt p Si deve vedere ora se la congruenza egrave risolubile o meno calcolando il valore del simbolo di Jacobi

⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= ⎟⎠⎞

⎜⎝⎛ minus1427

47

Piugrave che effettuare il calcolo diretto cercando il valore assunto da Q 21minusp

= 10 211427minus

(mod 1427) con lrsquoalgoritmo di esponenziazione modulare egrave conveniente utilizzare un algoritmo che utilizzi le formule c1 c2 c3 c4 e c5 sopra riportate con le quali si puograve realizzare un piugrave efficiente e veloce algoritmo di calcolo Ad esempio con i presenti valori impiegando il primo algoritmo sono necessarie 9 iterazioni con il secondo sono necessarie solo 4 iterazioni In generale lrsquouso del secondo algoritmo egrave tanto piugrave conveniente quanto piugrave grandi sono i valori di p Se il

valore di ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

egrave ndash1 la congruenza non egrave risolubile e quindi la ricerca termina Tornando alla congruenza

z 2 equiv ndash 47 (mod 1427) ed al relativo Simbolo di Jacobi = ⎟⎠⎞

⎜⎝⎛ minus1427

47 si ottiene per esso un valore + 1 per cui

egrave lecito proseguire nella risoluzione della congruenza

7

Proseguendo si deve trovare ora il minimo valore di P tale per cui D = P 2 ndash 4Q sia un non residuo quadratico di P Partendo con un valore di P = 1 si prosegue eventualmente con P =2 3 4 hellip

Ci si ferma nella ricerca allorcheacute il simbolo di Jacobi ⎟⎟⎠

⎞⎜⎜⎝

⎛ minusp

QP 4 risulta = ndash1

Utilizzando pertanto lo stesso algoritmo usato per il calcolo del simbolo di Jacobi partendo da un valore P = 1 dopo un numero limitato di iterazioni (in questo esempio bastano 3 iterazioni) si trova che per

P = 3 e quindi per D = 23 ndash 4middot (ndash 47) = 197 il simbolo di Jacobi ⎟⎠⎞

⎜⎝⎛1427197

vale ndash1 Applicando quanto

richiesto al punto e ) le formule (3bis) (4bis) (7bis) e (8bis) con i valori Q = ndash 47 P = 3 e D = 197 diventano per questo esempio le seguenti U(k i ) = U (k 1minusi )middotV(k 1minusi ) (3b)

V(k i ) = V(k 1minusi ) 2 ndash 2middot(- 47) 1minusik (4b)

2middotU(k i ) = 3middotU (k 1minusi )middotV(k 1minusi ) + V(k 1minusi ) 2 ndash 2middot(- 47) 1minusik (7b)

2middotV(k i ) = 3middotV(k 1minusi ) 2 + 197middotU (k 1minusi )middotV(k 1minusi ) ndash 2middot3middot(- 47) 1minusik (8b)

tramite le quali con un ciclo iterativo di operazioni (modulo p) si deve calcolare il valore di

2)( skV

(mod p) per sk = 2

1+p dove p = 1427 Il numero di iterazioni saragrave pari a ⎥

⎥⎢⎣

⎢2

)(Log

kLog s = 9

Vediamo ora di trovare la successione di indici k per arrivare al calcolo di V ⎟⎠⎞

⎜⎝⎛ +

211427

= V (714)

Innanzitutto la successione incluso lrsquoindice iniziale noto sk = 714 sino allrsquo indice k 0 = 1 egrave composta

da s +1 indici dove s = ⎥⎦

⎥⎢⎣

⎢2

714Log

Log = 9 Con le regole citate partendo da sk = 9k =

211427 +

= 714 si

possono calcolare gli altri valori decrescenti dei successivi indici k poicheacute sk egrave pari si ottiene 1minussk =

= 8k = 2

714 = 357 che essendo dispari daragrave luogo a sua volta ad un indice 2minussk = 7k di valore

21357 minus

=

= 178 Questo indice di valore pari daragrave luogo allrsquoindice 3minussk = 6k = 2

178 = 89 proseguendo con il

calcolo dei successivi indici si otterranno i seguenti valori

k 5 = 2

189 minus = 44 k 4 =

244

= 22 3k =222

= 11 2k = 2

111minus = 5 1k =

215minus

= 2 k 0 = 22

= 1

si ha pertanto seguente successione limitata di indici di valore numerico decrescente sia pari che dispari k 9 = 714 k 8 = 357 k 7 = 178 k 6 = 89 k 5 = 44 k 4 = 22 k 3 = 11 k 2 = 5 k1 = 2 k 0 = 1

8

Sempre per lrsquoesempio riportato si puograve costituire cosigrave la seguente tabella esplicativa

iterazione Passaggio indici Formule U (k 1minusi ) U (k i ) V(k 1minusi ) V (k i )

d a k 1minusi a k i da usare

1 a k 0 = 1 k 1 = 2 (3b) e (4b) U(1) U(2) V(1) V(2)

2 a k 1 = 2 k 2 = 5 (7b) e (8b) U(2) U(5) V (2) V(5)

3 a k 2 = 5 k 3 = 11 (7b) e (8b) U(5) U(11) V (5) V(11)

4 a k 3 = 11 k 4 = 22 (3b) e (4b) U(11) U (22) V(11) V(22)

5 a k 4 = 22 k 5 = 44 (3b) e (4b) U(22) U (44) V22) V(44)

6 a k 5 = 44 k 6 = 89 (7b) e (8b) U(44) U (89) V(44) V(89)

7 a k 6 = 89 k 7 = 178 (3b) e (4b) U(89) U (178) V(89) V(178)

8 a k 7 = 178 k 8 = 357 (7b) e (8b) U(178) U (357) V(178) V(357)

9 a k 8 = 357 k 9 = 714 (3b) e (4b) U(357) U (714) V(357) V(714)

Si ribadisce ancora una volta che tutti i calcoli per trovare valori di U e di V sono da effettuare in aritmetica modulo p (mod p) Ciograve comporta che tutti i valori numerici dei diversi U(k) e V(k) trovati non saranno mai superiori a p Per il calcolo dellrsquooperazione di elevazione a potenza Q k (mod p) che compare nelle formule si puograve fare ricorso allrsquo algoritmo della esponenziazione modulare Osservando perograve la particolare successione di indici ottenuti si puograve evitare tale tipo di algoritmo che pur efficiente allungherebbe sia il numero di istruzioni nel programma sia anche i tempi do calcolo rispetto ad un algoritmo basato sostanzialmente sulla seguente considerazione si osservi che passando da una iterazione a quella successiva

ikQ risulta essere pari a ( )21minusikQ se lrsquoindice 1minusik egrave un numero pari

ikQ risulta essere pari a ( )21minusikQ middot Q se lrsquoindice 1minusik egrave un numero dispari

Naturalmente i suddetti valori devono essere sempre calcolati (mod p ) Per completezza si riportano qui di seguito partendo dai valori iniziali di U e di V i successivi valori numerici di U e di V trovati in ciascuna iterazione (it) valori iniziali U = 1 V = P = 3 1 a it U(2) = 3 V(2) = 103 2 a it U(5) = 705 V(5) = 1194 3 a it U(11) = 926 V(11) = 581 4 a it U(22) = 27 V(22) = 1218 5 a it U(44) = 65 V(44) = 892 6 a it U(89) = 582 V(89) = 726 7 a it U(178) = 140 V(178) = 597 8 a it U(357) = 0 V(357) = 885 9 a it U(714) = 0 V(714) = 1328

il risultato V(714) = 1328 della 9 a e ultima iterazione egrave il valore cercato V ⎟⎠⎞

⎜⎝⎛ +

21p

= V ⎟⎠⎞

⎜⎝⎛ +

211427

= = = =

= V(714) = 1328 che diviso per 2 da luogo ad una delle soluzioni della congruenza 1z = 2

)714(V =

21328

=

= 664 Lrsquoaltro valore della congruenza egrave immediato 2z = ndash 664 equiv p ndash 1z = 763 Si noti il valore 0 di

2)714(U

Egrave il caso di ricordare ancora una volta che tutti i valori numerici sono calcolati (mod p)

9

Risoluzione della Congruenza z 2 equiv Q (mod p) con valori di Q e p grandi Ersquo necessario a questo punto precisare quanto segue un calcolo per la congruenza relativa ad un modulo p piccolo come quello dellrsquoesempio sopra illustrato (p = 1427) potrebbe essere sviluppato anche piugrave opportunamente con un programma di calcolo con lrsquoalgoritmo di tipo esaustivo composto da poche istruzioni

formanti un ciclo di operazioni ripetuto al massimo 2p

Ciograve egrave vero per moduli p abbastanza piccoli ma si puograve giagrave constatare che nel risolvere una congruenza il cui modulo p sia un primo costituito da solo 8 cifre la differenza dei tempi di calcolo comincia a farsi sentire Ad esempio risolvendo la seguente congruenza z 2 equiv 3 (mod 85225897) su di uno stesso calcolatore e con lrsquoutilizzo di un medesimo linguaggio (Qbasic) si sono ottenuti i seguenti tempi di risoluzione - con algoritmo esaustivo un tempo di 31 secondi - con algoritmo illustrato un tempo praticamente immediato

Il calcolo in questo caso egrave stato effettuato tramite lrsquoesecuzione di un programma realizzato e scritto in linguaggio Qbasic relativo alla risoluzione di una qualsiasi congruenza quadratica avente valori di Q e di p non grandi tali cioegrave di poter risolvere la congruenza in modo esatto con lrsquoutilizzo della sola aritmetica in doppia precisione disponibile sul nel software utilizzato Pertanto nel nostre caso occorre che Q sia composto da non piugrave di 15 cifre e p da non piugrave di 7 cifre Il listato del programma egrave riportato nellrsquo Allegato 1 Per moduli p anche non eccessivamente grandi costituiti da appena 16 cifre si egrave potuto constatare tramite apposito programma a precisione multipla che mentre il tempo impiegato per conoscere se la congruenza egrave risolubile e in tal caso calcolarne le soluzioni egrave praticamente immediato con un programma esaustivo naturalmente estrapolando i tempi ottenuti per moduli p piccoli ( p con 7 cifre e 8 cifre) il tempo di calcolo sarebbe maggiore ai 10 anni Per moduli p con 20 cifre si potrebbe avere addirittura un tempo di verifica e calcolo superiore ai 50 mila anni Che sia importante realizzare un algoritmo e di conseguenza un programma con cui risolvere in tempi brevi le congruenze con valori per Q per p grandi risulta evidente non solo da un punto di vista euristico ma anche quando si deve effettuare la scomposizione in fattori di un numero composto grande Infatti in uno dei piugrave moderni ed efficienti metodi di fattorizzazione di numeri grandi vale a dire il metodo del ldquoCrivello Quadraticordquo (Quadratic Sieve) egrave indispensabile risolvere preliminarmente diverse congruenze quadratiche anche con moduli primi di discrete dimensioni [Kob] [Bre] [SI4 [SI5] [SI6] Inoltre pure nel il campo della crittografia risulta necessario poter risolvere questo tipo di congruenza (vedi piugrave avanti il paragrafo delle applicazioni tecniche) Pertanto si egrave realizzato un ulteriore programma sempre in linguaggio Qbasic dedicato a valori per p e per Q che possono avere valori grandi composti ciascuno anche da diverse decine di cifre In effetti esso egrave atto a risolvere una qualsiasi congruenza quadratica avente termine noto Q sia positivo che negativo costituito sino a qualche centinaia di cifre e con modulo p primo ldquolimitatordquo composto al massimo da 125 cifre Questo limite egrave determinato dallrsquoaver utilizzato nelle istruzioni un solo array bidimensionale (una matrice puograve essere composta al massimo da 8000 elementi nel software Qbasic) per incamerare e memorizzare tutti gli

appositi indici k (da sk = 2

1+p a 0k = 1) trovati con le regole sopraesposte relativi ai valori U(k) e V(k)

In tale programma non essendo sufficienti i calcoli in doppia precisione relativi a tutte le operazioni aritmetiche presenti nel listato del programma mostrato in Allegato 1 le analoghe operazioni aritmetiche vengono effettuate compresa la divisione in aritmetica a precisione multipla Ciograve comporta lrsquoesattezza di tutti i calcoli su numeri grandi e sui risultati ottenuti a scapito perograve di una piugrave onerosa realizzazione del programma dato il grande numero di istruzioni e la loro maggiore complessitagrave necessarie allrsquoesecuzione delle varie operazioni aritmetiche Non si egrave ritenuto opportuno allegare al presente articolo per non appesantirlo troppo il listato del suddetto programma data la sua non indifferente lunghezza In una Tabella sotto riportata sono illustrati comunque alcuni risultati di esempi di risoluzione relativi a congruenze quadratiche ottenuti utilizzando il programma suddetto Nella penultima colonna della tabella egrave mostrato il tempo di calcolo richiesto con lrsquoalgoritmo illustrato Tal nellrsquoultima colonna egrave mostrato invece il tempo di calcolo necessario con lrsquoalgoritmo di tipo esaustivo Tes i valori con sono dedotti ovviamente per estrapolazione dai tempi ottenuti per moduli p di 7 e di 8 cifre Si noti che egrave impensabile intraprendere un calcolo esaustivo per risolvere qualsiasi congruenza quadratica avente per modulo un primo p anche di solo 16 cifre Per una piugrave facile lettura dei valori numerici essi sono stati separati in gruppi di 7 cifre decimali come del resto calcolati nel programma avendo utilizzato per le

10

operazioni aritmetiche la Base (Radix) 710 di numerazione anzicheacute la normale Base 110 Si fa osservare che ad un gruppo di 7 cifre in base 10 si fa corrispondere una singola cifra in aritmetica in Base 710 Considerazioni sulla congruenza z 2 equiv Q (mod n ) con n composto Finora si sono considerate congruenze aventi come moduli numeri primi p Per diversi algoritmi crittografici occorre trovare i valori che soddisfano una congruenza del tipo z 2 equiv Q (mod n ) con n composto dal prodotto di due numeri primi cioegrave n = 21 pp sdot con 1p e 2p numeri primi grandi costituiti ciascuno anche da piugrave di 150 cifre decimali Cosa si puograve dire riguardo ad un tale tipo di congruenza quadratica In generale la risoluzione di una congruenza quadratica con modulo composto presenta le stesse difficoltagrave del problema della fattorizzazione di un numero in quanto il primo passo per la sua eventuale risoluzione egrave quello di scomporre in fattori il modulo n

In questo specifico caso perograve si supponga di conoscere a priori i fattori 1p e 2p che compongono il modulo Si supponga anche che n e Q siano primi tra loro cioegrave che si abbia (Q n) = 1 dove con tale simbologia viene indicato il Massimo Comun Divisore fra Q ed n Condizione indispensabile percheacute la congruenza z 2 equiv Q (mod 21 pp sdot ) sia risolubile egrave che siano risolubili entrambe le due seguenti congruenze z 2 equiv Q (mod 1p ) e z 2 equiv Q (mod 2p ) In effetti se anche una sola delle due congruenze non risulta risolubile anche la congruenza con modulo n = 21 pp sdot non lo egrave [Tch] [Nag] Una volta risolte le due congruenze quadratiche rispettivamente con modulo 1p e modulo 2p ciascuna delle quali presenteragrave due valori numerici che la soddisfano si avranno disponibili 4 congruenze lineari z equiv 11z (mod 1p ) z equiv 12z (mod 1p ) relative alla congruenza con modulo 1p z equiv 21z (mod 2p ) z equiv 22z (mod 2p ) relative alla congruenza con modulo 2p con le quali si possono formare 22 distinti sistemi di congruenze composti ciascuno da 2 congruenze lineariSi tenga presente che in uno qualsiasi di questi 4 sistemi non devono mai comparire due congruenze lineari i cui termini noti siano le soluzioni di una stessa congruenza quadratica Ersquo ben noto che per trovare una soluzione atta a soddisfare un insieme di congruenze lineari bisogna far ricorso al Teorema cinese dei resti Per detto teorema si puograve fare riferimento ad una vasta bibliografia di cui si riportano solo alcuni riferimenti [Bar] [Niv] [Wag] relativi anche ad indirizzi di Siti Internet [SI4][SI5] Questo teorema ci assicura che dato un insieme di congruenze lineari se i vari moduli delle congruenze sono relativamente primi fra loro esiste un valore comune tale da soddisfare simultaneamente ognuna della congruenze Utilizzandolo nel nostro caso avremo che un generico valore dei 4 valori di z 2 equiv Q (mod n ) che la soddisfano puograve essere trovato tramite la seguente formula

nz = iz1 middot 1b middot1p

n + iz2 middot 2b middot

2pn

con i = 12

dove ogni ib si ricava risolvendo la congruenza lineare ip

nmiddot ib equiv 1 ( mod ip )

Alcune applicazioni tecniche Vi sono delle interessanti applicazioni tecniche in cui vengono implicati e utilizzati argomenti trattati nel presente articolo specie nel campo delle telecomunicazioni e della crittografia Ci limiteremo ad elencare qui alcune di quelli indicati in [Shr] e in [Schn] Per i residui quadratici - Applicazione di successioni di residui quadratici nella progettazione riguardante unrsquoampia diffusione di onde sonore negli ambienti per migliorare la qualitagrave acustica - Possibili applicazioni nella copertura radar e sonar nella riduzione del rumore - Applicazione per la riduzione delle interferenze in particolare riguardo al ldquojammingrdquo nelle comunicazioni

11

via radio in cui egrave raccomandato lrsquouso di larghi spettri in effetti nellrsquoutilizzo di una stessa banda di frequenze fra piugrave utenti si puograve dimostrare che lrsquoattribuzione di particolari successioni di residui quadratici da assegnare ad ognuno di loro permette di ridurre al minimo le interferenze fra le varie trasmissioni pur essendo esse contemporanee Per le congruenze quadratiche Oltre al loro giagrave summenzionato utilizzo in uno dei piugrave efficienti metodi di scomposizione in fattori di numeri grandi (Quadratic Sieve Method) altre applicazioni riguardano soprattutto il campo della crittografia abbinata al campo delle telecomunicazioni quali ad esempio ndash il metodo crittografico di Rabin [Schn] vedi riquadro ndash il metodo di Ong ndash Shnorr- Shamir [Schn] relativo alla firma digitale ndash il metodo di zero ndash knowledge di Feige- Fiat - Shamir [Schn] dedicato allrsquorsquoautenticazione della firma

digitale Per le Sequenze di Lucas vi sono applicazioni che interessano sia crittosistemi a chiave pubblica come ad esempio il ldquoLUC Public Key Encriptionrdquo) valido quanto il crittosistema RSA sia test di primalitagrave Riguardo a questrsquoultimo argomento egrave da mettere in evidenza infatti che la ricerca e lrsquoindividuazione dei piugrave grandi numeri primi finora scoperti si egrave potuta realizzare grazie proprio allrsquoimpiego di dette sequenze METODO di RABIN

Il messaggio M viene crittografato secondo la relazione C equiv 2M ( mod N ) dove N egrave un numero composto dal prodotto di due grandi primi 1p e 2p ciascuno costituito da parecchie decine di cifre in ricezione lrsquoutente la cui chiave pubblica egrave il numero N

quando riceve il messaggio criptato C egrave lrsquounico a poterlo decifrare utilizzando le sue due chiavi segrete 1p e 2p Esso perograve deve

disporre di un algoritmo veloce ed efficace per decrittare il messaggio secondo la relazione 2z equiv C ( mod N ) la cui risoluzione

puograve essere effettuata solo risolvendo prima le due congruenze 2z equiv C (mod 1p ) e 2z equiv C (mod 2p ) quindi col ricorso del Teorema dei Resti Cinese risolvendo il sistema di due congruenze lineari impieganti le soluzioni delle suddette congruenze Si

dimostra infatti che uno dei quattro valori di z trovati che soddisfano la congruenza 2z equiv C ( mod N ) risulta essere il messaggio originale M Ersquo da osservare perograve che sussiste lrsquoambiguitagrave della scelta del messaggio effettivo fra i quattro valori di z Se il messaggio originale egrave un normale testo in italiano (o comunque in unrsquoaltra lingua) allora saragrave facile scegliere fra i quattro valori di z quello corretto In generale sussiste la suddetta ambiguitagrave ----------------------------------------------------------------------------- Un possibile metodo comunque non molto efficiente per ovviare a ciograve potrebbe essere il seguente lrsquoutente a cui egrave destinato il messaggio mette a disposizione due chiavi pubbliche 1N = 1p middot 2p e 2N = 3p middot 4p avendo come sue chiavi segrete i quattro

numeri primi 1p 2p 3p e 4p Esso riceveragrave pertanto due messaggi criptati 1C equiv 2M (mod 1N ) e 2C equiv 2M (mod

2N ) che decritteragrave risolvendo le due congruenze quadratiche 2z equiv 1C (mod 1N ) e 2z equiv 2C (mod 2N ) Si avranno cosigrave disponibili quattro valori risolutivi per la prima congruenza ed altri quattro per la seconda Osservando queste otto soluzioni solo due in generale saranno identiche una estratta fra le quattro della prima congruenza lrsquoaltra estratta dalle altre quattro relative alla seconda congruenza Saragrave pertanto questa soluzione comune il messaggio originale M Nota sui residui Occorre tener conto che sui residui ottenuti si possono effettuare se necessarie le seguenti operazioni lecite in aritmetica modulare 1 ) se rn lt 0 egrave il residuo negativo (mod p ) di un valore numerico negativo ndashR i molti casi risulta preferibile sostituire questo valore negativo rn con lrsquoequivalente (piugrave prossimo a 0) residuo rp positivo ( mod p) di ndashR che risulta essere rp = p - |rn| Tale sostituzione risulta indispensabile allorcheacute si devono effettuare i calcoli in aritmetica a precisione multipla su grandi valori numerici non sono trattabili neanche con lrsquoaritmetica la doppia precisione disponibile sul calcolatore nel linguaggio utilizzato 2) detto rd il residuo dispari di R ( mod p) per ottenere un intero quale residuo di rd 2 si calcola il

valore 2

prd + che saragrave senzrsquoaltro intero essendo pgt2 dispari

Questa operazione deve essere effettuata ad esempio quando nelle formule (7) e (8) utilizzate per il calcolo del residuo di 2middotU(2k+1) e di 2middotV(2k+1) il risultato dei calcoli (mod p) egrave un numero dispari dovendo trovare invece il residuo di U(2k+1) o di V(2k+1)

12

RIFERIMENTI [Bar] - GC Barozzi Aritmetica un approccio computazionale Zanichelli Bologna 1991 [Bre] - DMBressoud Factorization and Primality Testing Springer-Verlag New York 1989 [Cip] - MCipolla Teoria dei numeri Analisi Indeterminata in Enciclopedia delle Matematiche Elementari volI parte I Cap IV ndash Parte seconda - U Hoepli editore Milano [Dic] - L E Dickson ndash History of the Theory of Numbers Vol I ChapVII - Chelsea Publishing Company New York 1992 [Eul] - L Euler Eleacutemens drsquoAlgegravebre ndashTome second Analise Indetermineacutee Bachelier Librairie pour le Matheacutematiques Paris 1807 [Hur] - A Hurwitz ndash N Kritikos Lectures on Number Theory Springer-Verlag New York 1986 [Kob] - N Kobliz A Course in Number Theory and Criptography Springer-Verlag New York 1994 [Kra] - EKranakis Primality and Cryptography JWiley amp Sons 1986 [Lan] - E Landau Elementary Number Theory Chelsea Publishing Company New York 1966 Nag] - T Nagell Introduction to Number Theory Chelsea Publishing Company New York 1981 [Niv] - I Niven - HSZuckerman An Introduction to the Theory of Numbers JWiley amp Sons 1980 [Old] - CD Olds Frazioni continue Collana di Matematica Moderna ndash vol MM5 Zanichelli Bologna 1970 [Pom] - C Pomerance Alla ricerca dei numeri primi Le Scienze - quaderni n14 marzo 1984 [Rib] - P Ribenboim The Book of Prime Number Records Springer-Verlag New York 1989 [Rie] H Riesel Prime Number and Computer Methods for Factorization Birkhaumluser Boston 1985 [Rob] - G Robin Algorithmique et cryptographie Mathematiques amp Applications vol ndeg 8 (1991) Ellipses ndash Edition Marketing [Sch] - MR Schroeder La Teoria dei Numeri franco muzio amp ceditore Padova 1986 [Schn] - B Schneider Applied Cryptography John Wiley amp SInc New York [Tch] - P L Tchebichef Teoria delle Congruenze E Loescher amp Cdeg Roma 1895 [Te1] - C Teodoro La Generazione della chiave privata nellrsquoalgoritmo crittografico RSA a chiave pubblica in ldquomatematicamenteit ndash sezione Applicazioni Ingegneriardquo [Te2] - C Teodoro Un metodo per il calcolo veloce dei numeri di Fibonacci e di Lucas La Comunicazione anno 2001 Vol XLX [Wag] - SWagon Guida a Matematica ( capitoli 8 e 9) McGraw ndashHill Libri Italia srl Milano 1995 Siti Internet [SI0] - httpaieecsumichedupeopleroundsWinter02SlidesLectureApril4pdf [SI1] - http164813169Enciklopedijamathmathjj026htm [SI2] - httpwwwmathswtedu~hazprob_setsnotesnode34html [SI3] - httpmathworldwolframcomLucasSequencehtml [SI4] - httpmathworldwolframcomQuadraticSievehtml [SI5] - httpwwwmathksuedumath511notesiqs2000htm [SI6] - httpnethzchstudentralbrunnTQShtml [SI7] - httpmathworldwolframcomChinese Remainder Theoremhtml [SI8] - httpwwwmathswtedu~hazprob_setsnotesnode25html

Vengono riportati nelle pagine seguenti

- alcuni esempi di calcolo per congruenze con valori di q e di p non grandi ottenuti utilizzando il programma riportato in ALLEGATO 1

- una Tabella riguardante diversi risultati di risoluzione di congruenze quadratiche presentanti valori di Q e di p grandi e quindi risolte con lrsquoimpiego di apposito programma utilizzante una aritmetica a precisione multipla - altri esempi di calcolo per congruenze presentanti anche valori di Q e di p grandi risolte utilizzando un apposito programma con aritmetica a precisione multipla

13

ESEMPI di risoluzione della congruenza )(mod2 pQz equiv con lrsquoutilizzo del programma in Allegato 1

ESEMPIO n1 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q876543 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p113 k5 = 57 k4 = 28 k3 = 14 k2 = 7 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 5 1 ^it U( 3 ) = 23 V( 3 ) = 95 2 ^it U( 7 ) = 23 V( 7 ) = 76 3 ^it U( 14 ) = 53 V( 14 ) = 96 4 ^it U( 28 ) = 3 V( 28 ) = 65 5 ^it U( 57 ) = 0 V( 57 ) = 11 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 876543 (mod 113 )SONO z1 = 62 z2 = 51 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-7723 che (z2^2 - Q) p =-7734 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

14

ESEMPIO n2 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -47 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 1427 k9 = 714 k8 = 357 k7 = 178 k6 = 89 k5 = 44 k4 = 22 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 103 2 ^it U( 5 ) = 705 V( 5 ) = 1194 3 ^it U( 11 ) = 926 V( 11 ) = 581 4 ^it U( 22 ) = 27 V( 22 ) = 1218 5 ^it U( 44 ) = 65 V( 44 ) = 892 6 ^it U( 89 ) = 582 V( 89 ) = 726 7 ^it U( 178 ) = 140 V( 178 ) = 597 8 ^it U( 357 ) = 0 V( 357 ) = 885 9 ^it U( 714 ) = 0 V( 714 ) = 1328 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-47 (mod 1427 ) SONO z1 = 664 z2 = 763 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 309 che (z2^2 - Q) p = 408 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

4

La verifica che il numero Q sia residuo quadratico o meno di p viene effettuata calcolando il simbolo di Jacobi [Cip] [Tch] [SI1] [SI2] che in questo caso essendo p primo coincide con il simbolo di Legendre

ed egrave indicato come segue ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

Si ha pertanto ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= Q 21minusp

(mod p) e quindi se ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

equiv +1 Q egrave

residuo quadratico di p se ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

equiv ndash1 Q egrave non residuo quadratico di p

d) ndash si deve poi trovare un opportuno minimo valore di P tale per cui D = P 2 ndash 4middotQ sia un non

residuo quadratico di p cioegrave ⎟⎟⎠

⎞⎜⎜⎝

⎛pD equiv ndash1 (mod p)

e) ndash effettuati questi calcoli occorre trovare un valido algoritmo per calcolare il valore plusmn 2

)(kV (mod p)

dove k = 2

1+p utilizzando perograve formule diverse dalle (1) e (2) in quanto con esse si dovrebbero calcolare

tutti i valori di U e di V precedenti il valore V ( 2

1+p ) il che come giagrave appurato nellrsquoarticolo citato

allungherebbe di molto il tempo di esecuzione Il programma scritto in linguaggio Qbasic riportato nellrsquoAllegato 1 comprende i vari punti sotto elencati ad esclusione del punto a) ciascuno dedicato a sviluppare algoritmi preposti a risolverli Si elencano qui di seguito i diversi algoritmi che devono essere preventivamente utilizzati nel programma prima di arrivare a quello di cui al punto e) Punto a) - egrave opportuno controllare preventivamente che il numero p sia effettivamente primo solo se p egrave primo si procederagrave ad introdurlo si prosegue quindi nella costruzione dellrsquoalgoritmo per soddisfare quanto richiesto al punto b) Punto b) - per verificare che il termine noto Q ed il modulo p siano primi tra loro si controlla che il loro Massimo Comun Divisore (mcd) abbia valore 1 Si puograve perograve evitare il calcolo del (mcd ) anche se non oneroso osservando che nellrsquoeffettuare al punto c) il calcolo del simbolo di Jacobi se si trovasse per tale simbolo il valore 0 (zero) ciograve indicherebbe che i numeri Q e p non sono primi fra loro

Punto c) - per trovare il valore del simbolo di Jacobi ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

non conviene procedere con il metodo ovvio

di esponenziazione modulare per calcolare il valore Q 21minusp

(mod p) ma con un algoritmo alternativo che consente di arrivare al risultato molto piugrave velocemente Questo algoritmo si basa sulle cinque seguenti proprietagrave e relazioni c1) c2) c3) c4) c5) attinenti il simbolo di Jacobi [Cip] [SI1[SI2]

c1 ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= (-1 ) 21minusQ

21minusp

⎟⎟⎠

⎞⎜⎜⎝

⎛Qp

c2 ⎟⎟⎠

⎞⎜⎜⎝

⎛p2

= (-1) 812 minusp

c3 ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= ⎟⎟⎠

⎞⎜⎜⎝

⎛pr

se Q equiv r ( mod p) c4 ⎟⎟⎠

⎞⎜⎜⎝

⎛p1

= 1 c5 ⎟⎟⎠

⎞⎜⎜⎝

⎛ minusp1

= (-1 ) 21minusp

Punto d) - per la ricerca dellrsquo appropriato minimo valore di P si sfrutta lo stesso algoritmo di cui al punto c) aggiungendo tuttavia nel programma da realizzare opportune istruzioni per tenere conto che occorreragrave ricercare il valore di P tramite anche diverse iterazioni da effettuarsi sullrsquoalgoritmo stesso Punto e) - Oggetto principale del presente articolo egrave quello di illustrare un algoritmo atto al calcolo rapido di un qualsiasi valore V(k) (mod p) della sequenza di Lucas relativa ai suddetti valori di Q e di P In

particolare si deve predisporre un efficiente algoritmo relativo al calcolo di plusmn2

)(kV (mod p) per un indice

5

k = 2

1+p Non essendo opportuno come giagrave accennato ricorrere allrsquouso delle relazioni (1) e (2) egrave necessario

rivolgere lrsquoattenzione ad altre formule relative ai termini U(k) e V(k) Sussistono in effetti le seguenti relazioni [Rib] [SI3] tra i valori delle due sequenze U(2middotk) = U (k)middotV(k) (3) V(2middotk) = V(k) 2 ndash 2middotQ k (4) 2middotU(2middotk+1) = U(2middotk)middotV(1) + V(2k)middotU(1) (5) 2middotV(2middotk+1) = V(2middotk)middotV(1) +DmiddotU(2middotk)middotU(1) (6) dove con k si intende il generico indice Poicheacute U(1) = 1 e V(1) = P tenendo conto delle relazioni (3) e (4 le due relazioni (5) e (6) si possono scrivere come segue 2middotU(2middotk+1) = P middot U (k) middot V(k) + V(k) 2 ndash 2middotQ k (7) 2middotV(2middotk+1) = P middot V(k) 2 + D middot U (k) middot V(k) ndash 2middotPmiddotQ k (8) dove ricordiamo D =P 2 ndash 4middotQ Dalle suddette relazioni si constata che valori di U(k) e V(k) ricavati dalle (3) e (4) relativi ad un generico indice pari 2middotk e dalle (7) e (8) relativi ad un generico indice dispari 2middotk +1 dipendono unicamente dallrsquoindice k e dai valori assunti da U e da V relativi a tale indice k Dallrsquoattenta osservazione dei valori degli indici riportati nelle suddette formule il calcolo dei valori U( sk ) e V( sk ) di un indice prefissato sk puograve essere eseguito con efficacia previa la realizzazione di una adeguata e limitata successione di indici k costruita con le seguenti regole

1) partendo dallrsquoindice sk che interessa il successivo indice da trovare egrave il seguente

1minussk =2

sk se sk egrave di valore pari 1minussk =

21minussk

se sk egrave di valore dispari

2) gli ulteriori indici 2minussk 3minussk helliphelliphelliphellip 2k 1k 0k della successione si trovano applicando a ciascuno di loro lrsquooperazione del tipo di cui al punto 1)

Si noti che tali indici assumono valori sempre piugrave piccoli fino ad arrivare allrsquoindice 0k di valore 1 Cosigrave operando si arriveragrave ad individuare tutti i valori numerici degli indici della successione sino allrsquoultimo

0k che ha valore 1 qualsiasi sia il valore dellrsquoindice sk di partenza Ersquo facile vedere poi che la successione degli indici da trovare non considerando pertanto lrsquoindice sk che egrave

noto egrave costituita solo da s = ⎥⎦

⎥⎢⎣

⎢2

)(Log

kLog s indici

Una volta ottenuta e opportunamente memorizzata tale successione di indici si devono considerare le formule (3) (4) (7) e (8) le quali prendendo in considerazione la successione degli indici possono essere scritte piugrave opportunamente nel seguente modo mettendo cosigrave in evidenza la loro natura (essenza ) iterativa

U (k i ) = U (k 1minusi ) middot V(k 1minusi ) (3b)

V (k i ) = V(k 1minusi ) 2 ndash 2 middot Q 1minusik (4b)

2 middot U (k i ) = P middot U (k 1minusi ) middot V(k 1minusi ) + V(k 1minusi ) 2 ndash 2 middot Q 1minusik (7b)

2 middot V (k i ) = P middot V(k 1minusi ) 2 + D middotU (k 1minusi ) middot V(k 1minusi ) ndash 2 middot P middot Q 1minusik (8b) Si osservi che dette formule danno luogo ad un calcolo di tipo iterativo il calcolo di U(k i ) e di V(k i ) puograve essere effettuato infatti con i valori di U(k 1minusi ) e di V(k 1minusi ) trovati nellrsquoiterazione precedente col valore dellrsquoindice k i anchrsquoesso giagrave trovato e con termine noto Q e dei valori P e D giagrave calcolati

6

Si dovranno poi prendere in considerazione le formule (3b ) e (4b) se lrsquoindice k i egrave di valore pari utilizzare invece le formule (7b) e(8b) se esso egrave di valore dispari Si puograve arrivare cosigrave al calcolo di U( sk ) e

di V( sk ) attraverso un ciclo limitato di s = ⎥⎦

⎥⎢⎣

⎢2

)(Log

kLog s iterazioni utilizzando gli indici trovati e

opportunamente memorizzati della successione Ersquo importante sottolineare che tutti i calcoli da effettuare sulle suddette formule sono da eseguirsi modulo p Ciograve significa che ogni risultato R di una qualsiasi operazione aritmetica qualora superi il valore p non puograve essere utilizzato come tale per una ulteriore operazione aritmetica al suo posto nel proseguimento dei calcoli deve essere utilizzato il resto r ottenuto dalla divisione di R per p Tutto ciograve viene indicato dicendo che le operazione aritmetiche sono effettuate ldquo(mod p)rdquo ed il valore r prende il nome di residuo modulo p di R Nel nostro caso per trovare lrsquoopportuna successione di indici di

valore numerico decrescente si deve partire dallrsquoindice sk =2

1+p

Avendo a disposizione la successione desiderata degli indici percheacute preventivamente memorizzata si parta ora dallrsquoindice k 0 = 1 e dai valori conosciuti di U(k 0 ) =1 e di V(k 0 ) = P risalendo poi passo passo tenendo conto dei particolari indici trovati della successione di valore sempre piugrave grande si egrave in grado di calcolare con le formule a disposizione i valori di U(k i ) e di V(k i ) relativi allrsquoindice k i utilizzando unicamente i valori di U(k 1minusi ) di V(k 1minusi ) e dellrsquoindice k 1minusi oltre naturalmente i valori del coefficiente noto Q e dei valori di P e D Il calcolo di U(k i ) e di V(k i ) potragrave quindi essere effettuato con i valori di U(k 1minusi ) e di V(k 1minusi ) giagrave trovati nellrsquoiterazione precedente dellrsquoindice k i preventivamente calcolato e dei termini noti Q P e D Si dovranno poi prendere come giagrave detto in considerazione le formule (3b) e (4b) se lrsquoindice k i egrave di valore pari si dovranno invece utilizzare le formule (7b) e(8b) se esso egrave di valore dispari

Pertanto attraverso il calcolo di un numero limitato di iterazioni pari a ⎥⎦

⎥⎢⎣

⎢2Log

Logks con sk = 2

1+p partendo

dallrsquoindice k 0 = 1 si possono trovare i valori di U( sk ) e di V( sk ) desiderati Esempio Vediamo di chiarire meglio tutto quanto finora esposto con un esempio molto semplice ma significativo I risultati qui esposti sono stati trovati con il programma il cui listato egrave riportato in Allegato 1 del presente articolo Si voglia risolvere la semplice congruenza z 2 equiv ndash 47 (mod 1427) dove Q = ndash 47 e p = 1427 Si sia giagrave verificato che il numero 1427 egrave primo per cui q e p sono primi fra loro essendo q lt p Si deve vedere ora se la congruenza egrave risolubile o meno calcolando il valore del simbolo di Jacobi

⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= ⎟⎠⎞

⎜⎝⎛ minus1427

47

Piugrave che effettuare il calcolo diretto cercando il valore assunto da Q 21minusp

= 10 211427minus

(mod 1427) con lrsquoalgoritmo di esponenziazione modulare egrave conveniente utilizzare un algoritmo che utilizzi le formule c1 c2 c3 c4 e c5 sopra riportate con le quali si puograve realizzare un piugrave efficiente e veloce algoritmo di calcolo Ad esempio con i presenti valori impiegando il primo algoritmo sono necessarie 9 iterazioni con il secondo sono necessarie solo 4 iterazioni In generale lrsquouso del secondo algoritmo egrave tanto piugrave conveniente quanto piugrave grandi sono i valori di p Se il

valore di ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

egrave ndash1 la congruenza non egrave risolubile e quindi la ricerca termina Tornando alla congruenza

z 2 equiv ndash 47 (mod 1427) ed al relativo Simbolo di Jacobi = ⎟⎠⎞

⎜⎝⎛ minus1427

47 si ottiene per esso un valore + 1 per cui

egrave lecito proseguire nella risoluzione della congruenza

7

Proseguendo si deve trovare ora il minimo valore di P tale per cui D = P 2 ndash 4Q sia un non residuo quadratico di P Partendo con un valore di P = 1 si prosegue eventualmente con P =2 3 4 hellip

Ci si ferma nella ricerca allorcheacute il simbolo di Jacobi ⎟⎟⎠

⎞⎜⎜⎝

⎛ minusp

QP 4 risulta = ndash1

Utilizzando pertanto lo stesso algoritmo usato per il calcolo del simbolo di Jacobi partendo da un valore P = 1 dopo un numero limitato di iterazioni (in questo esempio bastano 3 iterazioni) si trova che per

P = 3 e quindi per D = 23 ndash 4middot (ndash 47) = 197 il simbolo di Jacobi ⎟⎠⎞

⎜⎝⎛1427197

vale ndash1 Applicando quanto

richiesto al punto e ) le formule (3bis) (4bis) (7bis) e (8bis) con i valori Q = ndash 47 P = 3 e D = 197 diventano per questo esempio le seguenti U(k i ) = U (k 1minusi )middotV(k 1minusi ) (3b)

V(k i ) = V(k 1minusi ) 2 ndash 2middot(- 47) 1minusik (4b)

2middotU(k i ) = 3middotU (k 1minusi )middotV(k 1minusi ) + V(k 1minusi ) 2 ndash 2middot(- 47) 1minusik (7b)

2middotV(k i ) = 3middotV(k 1minusi ) 2 + 197middotU (k 1minusi )middotV(k 1minusi ) ndash 2middot3middot(- 47) 1minusik (8b)

tramite le quali con un ciclo iterativo di operazioni (modulo p) si deve calcolare il valore di

2)( skV

(mod p) per sk = 2

1+p dove p = 1427 Il numero di iterazioni saragrave pari a ⎥

⎥⎢⎣

⎢2

)(Log

kLog s = 9

Vediamo ora di trovare la successione di indici k per arrivare al calcolo di V ⎟⎠⎞

⎜⎝⎛ +

211427

= V (714)

Innanzitutto la successione incluso lrsquoindice iniziale noto sk = 714 sino allrsquo indice k 0 = 1 egrave composta

da s +1 indici dove s = ⎥⎦

⎥⎢⎣

⎢2

714Log

Log = 9 Con le regole citate partendo da sk = 9k =

211427 +

= 714 si

possono calcolare gli altri valori decrescenti dei successivi indici k poicheacute sk egrave pari si ottiene 1minussk =

= 8k = 2

714 = 357 che essendo dispari daragrave luogo a sua volta ad un indice 2minussk = 7k di valore

21357 minus

=

= 178 Questo indice di valore pari daragrave luogo allrsquoindice 3minussk = 6k = 2

178 = 89 proseguendo con il

calcolo dei successivi indici si otterranno i seguenti valori

k 5 = 2

189 minus = 44 k 4 =

244

= 22 3k =222

= 11 2k = 2

111minus = 5 1k =

215minus

= 2 k 0 = 22

= 1

si ha pertanto seguente successione limitata di indici di valore numerico decrescente sia pari che dispari k 9 = 714 k 8 = 357 k 7 = 178 k 6 = 89 k 5 = 44 k 4 = 22 k 3 = 11 k 2 = 5 k1 = 2 k 0 = 1

8

Sempre per lrsquoesempio riportato si puograve costituire cosigrave la seguente tabella esplicativa

iterazione Passaggio indici Formule U (k 1minusi ) U (k i ) V(k 1minusi ) V (k i )

d a k 1minusi a k i da usare

1 a k 0 = 1 k 1 = 2 (3b) e (4b) U(1) U(2) V(1) V(2)

2 a k 1 = 2 k 2 = 5 (7b) e (8b) U(2) U(5) V (2) V(5)

3 a k 2 = 5 k 3 = 11 (7b) e (8b) U(5) U(11) V (5) V(11)

4 a k 3 = 11 k 4 = 22 (3b) e (4b) U(11) U (22) V(11) V(22)

5 a k 4 = 22 k 5 = 44 (3b) e (4b) U(22) U (44) V22) V(44)

6 a k 5 = 44 k 6 = 89 (7b) e (8b) U(44) U (89) V(44) V(89)

7 a k 6 = 89 k 7 = 178 (3b) e (4b) U(89) U (178) V(89) V(178)

8 a k 7 = 178 k 8 = 357 (7b) e (8b) U(178) U (357) V(178) V(357)

9 a k 8 = 357 k 9 = 714 (3b) e (4b) U(357) U (714) V(357) V(714)

Si ribadisce ancora una volta che tutti i calcoli per trovare valori di U e di V sono da effettuare in aritmetica modulo p (mod p) Ciograve comporta che tutti i valori numerici dei diversi U(k) e V(k) trovati non saranno mai superiori a p Per il calcolo dellrsquooperazione di elevazione a potenza Q k (mod p) che compare nelle formule si puograve fare ricorso allrsquo algoritmo della esponenziazione modulare Osservando perograve la particolare successione di indici ottenuti si puograve evitare tale tipo di algoritmo che pur efficiente allungherebbe sia il numero di istruzioni nel programma sia anche i tempi do calcolo rispetto ad un algoritmo basato sostanzialmente sulla seguente considerazione si osservi che passando da una iterazione a quella successiva

ikQ risulta essere pari a ( )21minusikQ se lrsquoindice 1minusik egrave un numero pari

ikQ risulta essere pari a ( )21minusikQ middot Q se lrsquoindice 1minusik egrave un numero dispari

Naturalmente i suddetti valori devono essere sempre calcolati (mod p ) Per completezza si riportano qui di seguito partendo dai valori iniziali di U e di V i successivi valori numerici di U e di V trovati in ciascuna iterazione (it) valori iniziali U = 1 V = P = 3 1 a it U(2) = 3 V(2) = 103 2 a it U(5) = 705 V(5) = 1194 3 a it U(11) = 926 V(11) = 581 4 a it U(22) = 27 V(22) = 1218 5 a it U(44) = 65 V(44) = 892 6 a it U(89) = 582 V(89) = 726 7 a it U(178) = 140 V(178) = 597 8 a it U(357) = 0 V(357) = 885 9 a it U(714) = 0 V(714) = 1328

il risultato V(714) = 1328 della 9 a e ultima iterazione egrave il valore cercato V ⎟⎠⎞

⎜⎝⎛ +

21p

= V ⎟⎠⎞

⎜⎝⎛ +

211427

= = = =

= V(714) = 1328 che diviso per 2 da luogo ad una delle soluzioni della congruenza 1z = 2

)714(V =

21328

=

= 664 Lrsquoaltro valore della congruenza egrave immediato 2z = ndash 664 equiv p ndash 1z = 763 Si noti il valore 0 di

2)714(U

Egrave il caso di ricordare ancora una volta che tutti i valori numerici sono calcolati (mod p)

9

Risoluzione della Congruenza z 2 equiv Q (mod p) con valori di Q e p grandi Ersquo necessario a questo punto precisare quanto segue un calcolo per la congruenza relativa ad un modulo p piccolo come quello dellrsquoesempio sopra illustrato (p = 1427) potrebbe essere sviluppato anche piugrave opportunamente con un programma di calcolo con lrsquoalgoritmo di tipo esaustivo composto da poche istruzioni

formanti un ciclo di operazioni ripetuto al massimo 2p

Ciograve egrave vero per moduli p abbastanza piccoli ma si puograve giagrave constatare che nel risolvere una congruenza il cui modulo p sia un primo costituito da solo 8 cifre la differenza dei tempi di calcolo comincia a farsi sentire Ad esempio risolvendo la seguente congruenza z 2 equiv 3 (mod 85225897) su di uno stesso calcolatore e con lrsquoutilizzo di un medesimo linguaggio (Qbasic) si sono ottenuti i seguenti tempi di risoluzione - con algoritmo esaustivo un tempo di 31 secondi - con algoritmo illustrato un tempo praticamente immediato

Il calcolo in questo caso egrave stato effettuato tramite lrsquoesecuzione di un programma realizzato e scritto in linguaggio Qbasic relativo alla risoluzione di una qualsiasi congruenza quadratica avente valori di Q e di p non grandi tali cioegrave di poter risolvere la congruenza in modo esatto con lrsquoutilizzo della sola aritmetica in doppia precisione disponibile sul nel software utilizzato Pertanto nel nostre caso occorre che Q sia composto da non piugrave di 15 cifre e p da non piugrave di 7 cifre Il listato del programma egrave riportato nellrsquo Allegato 1 Per moduli p anche non eccessivamente grandi costituiti da appena 16 cifre si egrave potuto constatare tramite apposito programma a precisione multipla che mentre il tempo impiegato per conoscere se la congruenza egrave risolubile e in tal caso calcolarne le soluzioni egrave praticamente immediato con un programma esaustivo naturalmente estrapolando i tempi ottenuti per moduli p piccoli ( p con 7 cifre e 8 cifre) il tempo di calcolo sarebbe maggiore ai 10 anni Per moduli p con 20 cifre si potrebbe avere addirittura un tempo di verifica e calcolo superiore ai 50 mila anni Che sia importante realizzare un algoritmo e di conseguenza un programma con cui risolvere in tempi brevi le congruenze con valori per Q per p grandi risulta evidente non solo da un punto di vista euristico ma anche quando si deve effettuare la scomposizione in fattori di un numero composto grande Infatti in uno dei piugrave moderni ed efficienti metodi di fattorizzazione di numeri grandi vale a dire il metodo del ldquoCrivello Quadraticordquo (Quadratic Sieve) egrave indispensabile risolvere preliminarmente diverse congruenze quadratiche anche con moduli primi di discrete dimensioni [Kob] [Bre] [SI4 [SI5] [SI6] Inoltre pure nel il campo della crittografia risulta necessario poter risolvere questo tipo di congruenza (vedi piugrave avanti il paragrafo delle applicazioni tecniche) Pertanto si egrave realizzato un ulteriore programma sempre in linguaggio Qbasic dedicato a valori per p e per Q che possono avere valori grandi composti ciascuno anche da diverse decine di cifre In effetti esso egrave atto a risolvere una qualsiasi congruenza quadratica avente termine noto Q sia positivo che negativo costituito sino a qualche centinaia di cifre e con modulo p primo ldquolimitatordquo composto al massimo da 125 cifre Questo limite egrave determinato dallrsquoaver utilizzato nelle istruzioni un solo array bidimensionale (una matrice puograve essere composta al massimo da 8000 elementi nel software Qbasic) per incamerare e memorizzare tutti gli

appositi indici k (da sk = 2

1+p a 0k = 1) trovati con le regole sopraesposte relativi ai valori U(k) e V(k)

In tale programma non essendo sufficienti i calcoli in doppia precisione relativi a tutte le operazioni aritmetiche presenti nel listato del programma mostrato in Allegato 1 le analoghe operazioni aritmetiche vengono effettuate compresa la divisione in aritmetica a precisione multipla Ciograve comporta lrsquoesattezza di tutti i calcoli su numeri grandi e sui risultati ottenuti a scapito perograve di una piugrave onerosa realizzazione del programma dato il grande numero di istruzioni e la loro maggiore complessitagrave necessarie allrsquoesecuzione delle varie operazioni aritmetiche Non si egrave ritenuto opportuno allegare al presente articolo per non appesantirlo troppo il listato del suddetto programma data la sua non indifferente lunghezza In una Tabella sotto riportata sono illustrati comunque alcuni risultati di esempi di risoluzione relativi a congruenze quadratiche ottenuti utilizzando il programma suddetto Nella penultima colonna della tabella egrave mostrato il tempo di calcolo richiesto con lrsquoalgoritmo illustrato Tal nellrsquoultima colonna egrave mostrato invece il tempo di calcolo necessario con lrsquoalgoritmo di tipo esaustivo Tes i valori con sono dedotti ovviamente per estrapolazione dai tempi ottenuti per moduli p di 7 e di 8 cifre Si noti che egrave impensabile intraprendere un calcolo esaustivo per risolvere qualsiasi congruenza quadratica avente per modulo un primo p anche di solo 16 cifre Per una piugrave facile lettura dei valori numerici essi sono stati separati in gruppi di 7 cifre decimali come del resto calcolati nel programma avendo utilizzato per le

10

operazioni aritmetiche la Base (Radix) 710 di numerazione anzicheacute la normale Base 110 Si fa osservare che ad un gruppo di 7 cifre in base 10 si fa corrispondere una singola cifra in aritmetica in Base 710 Considerazioni sulla congruenza z 2 equiv Q (mod n ) con n composto Finora si sono considerate congruenze aventi come moduli numeri primi p Per diversi algoritmi crittografici occorre trovare i valori che soddisfano una congruenza del tipo z 2 equiv Q (mod n ) con n composto dal prodotto di due numeri primi cioegrave n = 21 pp sdot con 1p e 2p numeri primi grandi costituiti ciascuno anche da piugrave di 150 cifre decimali Cosa si puograve dire riguardo ad un tale tipo di congruenza quadratica In generale la risoluzione di una congruenza quadratica con modulo composto presenta le stesse difficoltagrave del problema della fattorizzazione di un numero in quanto il primo passo per la sua eventuale risoluzione egrave quello di scomporre in fattori il modulo n

In questo specifico caso perograve si supponga di conoscere a priori i fattori 1p e 2p che compongono il modulo Si supponga anche che n e Q siano primi tra loro cioegrave che si abbia (Q n) = 1 dove con tale simbologia viene indicato il Massimo Comun Divisore fra Q ed n Condizione indispensabile percheacute la congruenza z 2 equiv Q (mod 21 pp sdot ) sia risolubile egrave che siano risolubili entrambe le due seguenti congruenze z 2 equiv Q (mod 1p ) e z 2 equiv Q (mod 2p ) In effetti se anche una sola delle due congruenze non risulta risolubile anche la congruenza con modulo n = 21 pp sdot non lo egrave [Tch] [Nag] Una volta risolte le due congruenze quadratiche rispettivamente con modulo 1p e modulo 2p ciascuna delle quali presenteragrave due valori numerici che la soddisfano si avranno disponibili 4 congruenze lineari z equiv 11z (mod 1p ) z equiv 12z (mod 1p ) relative alla congruenza con modulo 1p z equiv 21z (mod 2p ) z equiv 22z (mod 2p ) relative alla congruenza con modulo 2p con le quali si possono formare 22 distinti sistemi di congruenze composti ciascuno da 2 congruenze lineariSi tenga presente che in uno qualsiasi di questi 4 sistemi non devono mai comparire due congruenze lineari i cui termini noti siano le soluzioni di una stessa congruenza quadratica Ersquo ben noto che per trovare una soluzione atta a soddisfare un insieme di congruenze lineari bisogna far ricorso al Teorema cinese dei resti Per detto teorema si puograve fare riferimento ad una vasta bibliografia di cui si riportano solo alcuni riferimenti [Bar] [Niv] [Wag] relativi anche ad indirizzi di Siti Internet [SI4][SI5] Questo teorema ci assicura che dato un insieme di congruenze lineari se i vari moduli delle congruenze sono relativamente primi fra loro esiste un valore comune tale da soddisfare simultaneamente ognuna della congruenze Utilizzandolo nel nostro caso avremo che un generico valore dei 4 valori di z 2 equiv Q (mod n ) che la soddisfano puograve essere trovato tramite la seguente formula

nz = iz1 middot 1b middot1p

n + iz2 middot 2b middot

2pn

con i = 12

dove ogni ib si ricava risolvendo la congruenza lineare ip

nmiddot ib equiv 1 ( mod ip )

Alcune applicazioni tecniche Vi sono delle interessanti applicazioni tecniche in cui vengono implicati e utilizzati argomenti trattati nel presente articolo specie nel campo delle telecomunicazioni e della crittografia Ci limiteremo ad elencare qui alcune di quelli indicati in [Shr] e in [Schn] Per i residui quadratici - Applicazione di successioni di residui quadratici nella progettazione riguardante unrsquoampia diffusione di onde sonore negli ambienti per migliorare la qualitagrave acustica - Possibili applicazioni nella copertura radar e sonar nella riduzione del rumore - Applicazione per la riduzione delle interferenze in particolare riguardo al ldquojammingrdquo nelle comunicazioni

11

via radio in cui egrave raccomandato lrsquouso di larghi spettri in effetti nellrsquoutilizzo di una stessa banda di frequenze fra piugrave utenti si puograve dimostrare che lrsquoattribuzione di particolari successioni di residui quadratici da assegnare ad ognuno di loro permette di ridurre al minimo le interferenze fra le varie trasmissioni pur essendo esse contemporanee Per le congruenze quadratiche Oltre al loro giagrave summenzionato utilizzo in uno dei piugrave efficienti metodi di scomposizione in fattori di numeri grandi (Quadratic Sieve Method) altre applicazioni riguardano soprattutto il campo della crittografia abbinata al campo delle telecomunicazioni quali ad esempio ndash il metodo crittografico di Rabin [Schn] vedi riquadro ndash il metodo di Ong ndash Shnorr- Shamir [Schn] relativo alla firma digitale ndash il metodo di zero ndash knowledge di Feige- Fiat - Shamir [Schn] dedicato allrsquorsquoautenticazione della firma

digitale Per le Sequenze di Lucas vi sono applicazioni che interessano sia crittosistemi a chiave pubblica come ad esempio il ldquoLUC Public Key Encriptionrdquo) valido quanto il crittosistema RSA sia test di primalitagrave Riguardo a questrsquoultimo argomento egrave da mettere in evidenza infatti che la ricerca e lrsquoindividuazione dei piugrave grandi numeri primi finora scoperti si egrave potuta realizzare grazie proprio allrsquoimpiego di dette sequenze METODO di RABIN

Il messaggio M viene crittografato secondo la relazione C equiv 2M ( mod N ) dove N egrave un numero composto dal prodotto di due grandi primi 1p e 2p ciascuno costituito da parecchie decine di cifre in ricezione lrsquoutente la cui chiave pubblica egrave il numero N

quando riceve il messaggio criptato C egrave lrsquounico a poterlo decifrare utilizzando le sue due chiavi segrete 1p e 2p Esso perograve deve

disporre di un algoritmo veloce ed efficace per decrittare il messaggio secondo la relazione 2z equiv C ( mod N ) la cui risoluzione

puograve essere effettuata solo risolvendo prima le due congruenze 2z equiv C (mod 1p ) e 2z equiv C (mod 2p ) quindi col ricorso del Teorema dei Resti Cinese risolvendo il sistema di due congruenze lineari impieganti le soluzioni delle suddette congruenze Si

dimostra infatti che uno dei quattro valori di z trovati che soddisfano la congruenza 2z equiv C ( mod N ) risulta essere il messaggio originale M Ersquo da osservare perograve che sussiste lrsquoambiguitagrave della scelta del messaggio effettivo fra i quattro valori di z Se il messaggio originale egrave un normale testo in italiano (o comunque in unrsquoaltra lingua) allora saragrave facile scegliere fra i quattro valori di z quello corretto In generale sussiste la suddetta ambiguitagrave ----------------------------------------------------------------------------- Un possibile metodo comunque non molto efficiente per ovviare a ciograve potrebbe essere il seguente lrsquoutente a cui egrave destinato il messaggio mette a disposizione due chiavi pubbliche 1N = 1p middot 2p e 2N = 3p middot 4p avendo come sue chiavi segrete i quattro

numeri primi 1p 2p 3p e 4p Esso riceveragrave pertanto due messaggi criptati 1C equiv 2M (mod 1N ) e 2C equiv 2M (mod

2N ) che decritteragrave risolvendo le due congruenze quadratiche 2z equiv 1C (mod 1N ) e 2z equiv 2C (mod 2N ) Si avranno cosigrave disponibili quattro valori risolutivi per la prima congruenza ed altri quattro per la seconda Osservando queste otto soluzioni solo due in generale saranno identiche una estratta fra le quattro della prima congruenza lrsquoaltra estratta dalle altre quattro relative alla seconda congruenza Saragrave pertanto questa soluzione comune il messaggio originale M Nota sui residui Occorre tener conto che sui residui ottenuti si possono effettuare se necessarie le seguenti operazioni lecite in aritmetica modulare 1 ) se rn lt 0 egrave il residuo negativo (mod p ) di un valore numerico negativo ndashR i molti casi risulta preferibile sostituire questo valore negativo rn con lrsquoequivalente (piugrave prossimo a 0) residuo rp positivo ( mod p) di ndashR che risulta essere rp = p - |rn| Tale sostituzione risulta indispensabile allorcheacute si devono effettuare i calcoli in aritmetica a precisione multipla su grandi valori numerici non sono trattabili neanche con lrsquoaritmetica la doppia precisione disponibile sul calcolatore nel linguaggio utilizzato 2) detto rd il residuo dispari di R ( mod p) per ottenere un intero quale residuo di rd 2 si calcola il

valore 2

prd + che saragrave senzrsquoaltro intero essendo pgt2 dispari

Questa operazione deve essere effettuata ad esempio quando nelle formule (7) e (8) utilizzate per il calcolo del residuo di 2middotU(2k+1) e di 2middotV(2k+1) il risultato dei calcoli (mod p) egrave un numero dispari dovendo trovare invece il residuo di U(2k+1) o di V(2k+1)

12

RIFERIMENTI [Bar] - GC Barozzi Aritmetica un approccio computazionale Zanichelli Bologna 1991 [Bre] - DMBressoud Factorization and Primality Testing Springer-Verlag New York 1989 [Cip] - MCipolla Teoria dei numeri Analisi Indeterminata in Enciclopedia delle Matematiche Elementari volI parte I Cap IV ndash Parte seconda - U Hoepli editore Milano [Dic] - L E Dickson ndash History of the Theory of Numbers Vol I ChapVII - Chelsea Publishing Company New York 1992 [Eul] - L Euler Eleacutemens drsquoAlgegravebre ndashTome second Analise Indetermineacutee Bachelier Librairie pour le Matheacutematiques Paris 1807 [Hur] - A Hurwitz ndash N Kritikos Lectures on Number Theory Springer-Verlag New York 1986 [Kob] - N Kobliz A Course in Number Theory and Criptography Springer-Verlag New York 1994 [Kra] - EKranakis Primality and Cryptography JWiley amp Sons 1986 [Lan] - E Landau Elementary Number Theory Chelsea Publishing Company New York 1966 Nag] - T Nagell Introduction to Number Theory Chelsea Publishing Company New York 1981 [Niv] - I Niven - HSZuckerman An Introduction to the Theory of Numbers JWiley amp Sons 1980 [Old] - CD Olds Frazioni continue Collana di Matematica Moderna ndash vol MM5 Zanichelli Bologna 1970 [Pom] - C Pomerance Alla ricerca dei numeri primi Le Scienze - quaderni n14 marzo 1984 [Rib] - P Ribenboim The Book of Prime Number Records Springer-Verlag New York 1989 [Rie] H Riesel Prime Number and Computer Methods for Factorization Birkhaumluser Boston 1985 [Rob] - G Robin Algorithmique et cryptographie Mathematiques amp Applications vol ndeg 8 (1991) Ellipses ndash Edition Marketing [Sch] - MR Schroeder La Teoria dei Numeri franco muzio amp ceditore Padova 1986 [Schn] - B Schneider Applied Cryptography John Wiley amp SInc New York [Tch] - P L Tchebichef Teoria delle Congruenze E Loescher amp Cdeg Roma 1895 [Te1] - C Teodoro La Generazione della chiave privata nellrsquoalgoritmo crittografico RSA a chiave pubblica in ldquomatematicamenteit ndash sezione Applicazioni Ingegneriardquo [Te2] - C Teodoro Un metodo per il calcolo veloce dei numeri di Fibonacci e di Lucas La Comunicazione anno 2001 Vol XLX [Wag] - SWagon Guida a Matematica ( capitoli 8 e 9) McGraw ndashHill Libri Italia srl Milano 1995 Siti Internet [SI0] - httpaieecsumichedupeopleroundsWinter02SlidesLectureApril4pdf [SI1] - http164813169Enciklopedijamathmathjj026htm [SI2] - httpwwwmathswtedu~hazprob_setsnotesnode34html [SI3] - httpmathworldwolframcomLucasSequencehtml [SI4] - httpmathworldwolframcomQuadraticSievehtml [SI5] - httpwwwmathksuedumath511notesiqs2000htm [SI6] - httpnethzchstudentralbrunnTQShtml [SI7] - httpmathworldwolframcomChinese Remainder Theoremhtml [SI8] - httpwwwmathswtedu~hazprob_setsnotesnode25html

Vengono riportati nelle pagine seguenti

- alcuni esempi di calcolo per congruenze con valori di q e di p non grandi ottenuti utilizzando il programma riportato in ALLEGATO 1

- una Tabella riguardante diversi risultati di risoluzione di congruenze quadratiche presentanti valori di Q e di p grandi e quindi risolte con lrsquoimpiego di apposito programma utilizzante una aritmetica a precisione multipla - altri esempi di calcolo per congruenze presentanti anche valori di Q e di p grandi risolte utilizzando un apposito programma con aritmetica a precisione multipla

13

ESEMPI di risoluzione della congruenza )(mod2 pQz equiv con lrsquoutilizzo del programma in Allegato 1

ESEMPIO n1 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q876543 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p113 k5 = 57 k4 = 28 k3 = 14 k2 = 7 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 5 1 ^it U( 3 ) = 23 V( 3 ) = 95 2 ^it U( 7 ) = 23 V( 7 ) = 76 3 ^it U( 14 ) = 53 V( 14 ) = 96 4 ^it U( 28 ) = 3 V( 28 ) = 65 5 ^it U( 57 ) = 0 V( 57 ) = 11 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 876543 (mod 113 )SONO z1 = 62 z2 = 51 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-7723 che (z2^2 - Q) p =-7734 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

14

ESEMPIO n2 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -47 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 1427 k9 = 714 k8 = 357 k7 = 178 k6 = 89 k5 = 44 k4 = 22 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 103 2 ^it U( 5 ) = 705 V( 5 ) = 1194 3 ^it U( 11 ) = 926 V( 11 ) = 581 4 ^it U( 22 ) = 27 V( 22 ) = 1218 5 ^it U( 44 ) = 65 V( 44 ) = 892 6 ^it U( 89 ) = 582 V( 89 ) = 726 7 ^it U( 178 ) = 140 V( 178 ) = 597 8 ^it U( 357 ) = 0 V( 357 ) = 885 9 ^it U( 714 ) = 0 V( 714 ) = 1328 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-47 (mod 1427 ) SONO z1 = 664 z2 = 763 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 309 che (z2^2 - Q) p = 408 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

5

k = 2

1+p Non essendo opportuno come giagrave accennato ricorrere allrsquouso delle relazioni (1) e (2) egrave necessario

rivolgere lrsquoattenzione ad altre formule relative ai termini U(k) e V(k) Sussistono in effetti le seguenti relazioni [Rib] [SI3] tra i valori delle due sequenze U(2middotk) = U (k)middotV(k) (3) V(2middotk) = V(k) 2 ndash 2middotQ k (4) 2middotU(2middotk+1) = U(2middotk)middotV(1) + V(2k)middotU(1) (5) 2middotV(2middotk+1) = V(2middotk)middotV(1) +DmiddotU(2middotk)middotU(1) (6) dove con k si intende il generico indice Poicheacute U(1) = 1 e V(1) = P tenendo conto delle relazioni (3) e (4 le due relazioni (5) e (6) si possono scrivere come segue 2middotU(2middotk+1) = P middot U (k) middot V(k) + V(k) 2 ndash 2middotQ k (7) 2middotV(2middotk+1) = P middot V(k) 2 + D middot U (k) middot V(k) ndash 2middotPmiddotQ k (8) dove ricordiamo D =P 2 ndash 4middotQ Dalle suddette relazioni si constata che valori di U(k) e V(k) ricavati dalle (3) e (4) relativi ad un generico indice pari 2middotk e dalle (7) e (8) relativi ad un generico indice dispari 2middotk +1 dipendono unicamente dallrsquoindice k e dai valori assunti da U e da V relativi a tale indice k Dallrsquoattenta osservazione dei valori degli indici riportati nelle suddette formule il calcolo dei valori U( sk ) e V( sk ) di un indice prefissato sk puograve essere eseguito con efficacia previa la realizzazione di una adeguata e limitata successione di indici k costruita con le seguenti regole

1) partendo dallrsquoindice sk che interessa il successivo indice da trovare egrave il seguente

1minussk =2

sk se sk egrave di valore pari 1minussk =

21minussk

se sk egrave di valore dispari

2) gli ulteriori indici 2minussk 3minussk helliphelliphelliphellip 2k 1k 0k della successione si trovano applicando a ciascuno di loro lrsquooperazione del tipo di cui al punto 1)

Si noti che tali indici assumono valori sempre piugrave piccoli fino ad arrivare allrsquoindice 0k di valore 1 Cosigrave operando si arriveragrave ad individuare tutti i valori numerici degli indici della successione sino allrsquoultimo

0k che ha valore 1 qualsiasi sia il valore dellrsquoindice sk di partenza Ersquo facile vedere poi che la successione degli indici da trovare non considerando pertanto lrsquoindice sk che egrave

noto egrave costituita solo da s = ⎥⎦

⎥⎢⎣

⎢2

)(Log

kLog s indici

Una volta ottenuta e opportunamente memorizzata tale successione di indici si devono considerare le formule (3) (4) (7) e (8) le quali prendendo in considerazione la successione degli indici possono essere scritte piugrave opportunamente nel seguente modo mettendo cosigrave in evidenza la loro natura (essenza ) iterativa

U (k i ) = U (k 1minusi ) middot V(k 1minusi ) (3b)

V (k i ) = V(k 1minusi ) 2 ndash 2 middot Q 1minusik (4b)

2 middot U (k i ) = P middot U (k 1minusi ) middot V(k 1minusi ) + V(k 1minusi ) 2 ndash 2 middot Q 1minusik (7b)

2 middot V (k i ) = P middot V(k 1minusi ) 2 + D middotU (k 1minusi ) middot V(k 1minusi ) ndash 2 middot P middot Q 1minusik (8b) Si osservi che dette formule danno luogo ad un calcolo di tipo iterativo il calcolo di U(k i ) e di V(k i ) puograve essere effettuato infatti con i valori di U(k 1minusi ) e di V(k 1minusi ) trovati nellrsquoiterazione precedente col valore dellrsquoindice k i anchrsquoesso giagrave trovato e con termine noto Q e dei valori P e D giagrave calcolati

6

Si dovranno poi prendere in considerazione le formule (3b ) e (4b) se lrsquoindice k i egrave di valore pari utilizzare invece le formule (7b) e(8b) se esso egrave di valore dispari Si puograve arrivare cosigrave al calcolo di U( sk ) e

di V( sk ) attraverso un ciclo limitato di s = ⎥⎦

⎥⎢⎣

⎢2

)(Log

kLog s iterazioni utilizzando gli indici trovati e

opportunamente memorizzati della successione Ersquo importante sottolineare che tutti i calcoli da effettuare sulle suddette formule sono da eseguirsi modulo p Ciograve significa che ogni risultato R di una qualsiasi operazione aritmetica qualora superi il valore p non puograve essere utilizzato come tale per una ulteriore operazione aritmetica al suo posto nel proseguimento dei calcoli deve essere utilizzato il resto r ottenuto dalla divisione di R per p Tutto ciograve viene indicato dicendo che le operazione aritmetiche sono effettuate ldquo(mod p)rdquo ed il valore r prende il nome di residuo modulo p di R Nel nostro caso per trovare lrsquoopportuna successione di indici di

valore numerico decrescente si deve partire dallrsquoindice sk =2

1+p

Avendo a disposizione la successione desiderata degli indici percheacute preventivamente memorizzata si parta ora dallrsquoindice k 0 = 1 e dai valori conosciuti di U(k 0 ) =1 e di V(k 0 ) = P risalendo poi passo passo tenendo conto dei particolari indici trovati della successione di valore sempre piugrave grande si egrave in grado di calcolare con le formule a disposizione i valori di U(k i ) e di V(k i ) relativi allrsquoindice k i utilizzando unicamente i valori di U(k 1minusi ) di V(k 1minusi ) e dellrsquoindice k 1minusi oltre naturalmente i valori del coefficiente noto Q e dei valori di P e D Il calcolo di U(k i ) e di V(k i ) potragrave quindi essere effettuato con i valori di U(k 1minusi ) e di V(k 1minusi ) giagrave trovati nellrsquoiterazione precedente dellrsquoindice k i preventivamente calcolato e dei termini noti Q P e D Si dovranno poi prendere come giagrave detto in considerazione le formule (3b) e (4b) se lrsquoindice k i egrave di valore pari si dovranno invece utilizzare le formule (7b) e(8b) se esso egrave di valore dispari

Pertanto attraverso il calcolo di un numero limitato di iterazioni pari a ⎥⎦

⎥⎢⎣

⎢2Log

Logks con sk = 2

1+p partendo

dallrsquoindice k 0 = 1 si possono trovare i valori di U( sk ) e di V( sk ) desiderati Esempio Vediamo di chiarire meglio tutto quanto finora esposto con un esempio molto semplice ma significativo I risultati qui esposti sono stati trovati con il programma il cui listato egrave riportato in Allegato 1 del presente articolo Si voglia risolvere la semplice congruenza z 2 equiv ndash 47 (mod 1427) dove Q = ndash 47 e p = 1427 Si sia giagrave verificato che il numero 1427 egrave primo per cui q e p sono primi fra loro essendo q lt p Si deve vedere ora se la congruenza egrave risolubile o meno calcolando il valore del simbolo di Jacobi

⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= ⎟⎠⎞

⎜⎝⎛ minus1427

47

Piugrave che effettuare il calcolo diretto cercando il valore assunto da Q 21minusp

= 10 211427minus

(mod 1427) con lrsquoalgoritmo di esponenziazione modulare egrave conveniente utilizzare un algoritmo che utilizzi le formule c1 c2 c3 c4 e c5 sopra riportate con le quali si puograve realizzare un piugrave efficiente e veloce algoritmo di calcolo Ad esempio con i presenti valori impiegando il primo algoritmo sono necessarie 9 iterazioni con il secondo sono necessarie solo 4 iterazioni In generale lrsquouso del secondo algoritmo egrave tanto piugrave conveniente quanto piugrave grandi sono i valori di p Se il

valore di ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

egrave ndash1 la congruenza non egrave risolubile e quindi la ricerca termina Tornando alla congruenza

z 2 equiv ndash 47 (mod 1427) ed al relativo Simbolo di Jacobi = ⎟⎠⎞

⎜⎝⎛ minus1427

47 si ottiene per esso un valore + 1 per cui

egrave lecito proseguire nella risoluzione della congruenza

7

Proseguendo si deve trovare ora il minimo valore di P tale per cui D = P 2 ndash 4Q sia un non residuo quadratico di P Partendo con un valore di P = 1 si prosegue eventualmente con P =2 3 4 hellip

Ci si ferma nella ricerca allorcheacute il simbolo di Jacobi ⎟⎟⎠

⎞⎜⎜⎝

⎛ minusp

QP 4 risulta = ndash1

Utilizzando pertanto lo stesso algoritmo usato per il calcolo del simbolo di Jacobi partendo da un valore P = 1 dopo un numero limitato di iterazioni (in questo esempio bastano 3 iterazioni) si trova che per

P = 3 e quindi per D = 23 ndash 4middot (ndash 47) = 197 il simbolo di Jacobi ⎟⎠⎞

⎜⎝⎛1427197

vale ndash1 Applicando quanto

richiesto al punto e ) le formule (3bis) (4bis) (7bis) e (8bis) con i valori Q = ndash 47 P = 3 e D = 197 diventano per questo esempio le seguenti U(k i ) = U (k 1minusi )middotV(k 1minusi ) (3b)

V(k i ) = V(k 1minusi ) 2 ndash 2middot(- 47) 1minusik (4b)

2middotU(k i ) = 3middotU (k 1minusi )middotV(k 1minusi ) + V(k 1minusi ) 2 ndash 2middot(- 47) 1minusik (7b)

2middotV(k i ) = 3middotV(k 1minusi ) 2 + 197middotU (k 1minusi )middotV(k 1minusi ) ndash 2middot3middot(- 47) 1minusik (8b)

tramite le quali con un ciclo iterativo di operazioni (modulo p) si deve calcolare il valore di

2)( skV

(mod p) per sk = 2

1+p dove p = 1427 Il numero di iterazioni saragrave pari a ⎥

⎥⎢⎣

⎢2

)(Log

kLog s = 9

Vediamo ora di trovare la successione di indici k per arrivare al calcolo di V ⎟⎠⎞

⎜⎝⎛ +

211427

= V (714)

Innanzitutto la successione incluso lrsquoindice iniziale noto sk = 714 sino allrsquo indice k 0 = 1 egrave composta

da s +1 indici dove s = ⎥⎦

⎥⎢⎣

⎢2

714Log

Log = 9 Con le regole citate partendo da sk = 9k =

211427 +

= 714 si

possono calcolare gli altri valori decrescenti dei successivi indici k poicheacute sk egrave pari si ottiene 1minussk =

= 8k = 2

714 = 357 che essendo dispari daragrave luogo a sua volta ad un indice 2minussk = 7k di valore

21357 minus

=

= 178 Questo indice di valore pari daragrave luogo allrsquoindice 3minussk = 6k = 2

178 = 89 proseguendo con il

calcolo dei successivi indici si otterranno i seguenti valori

k 5 = 2

189 minus = 44 k 4 =

244

= 22 3k =222

= 11 2k = 2

111minus = 5 1k =

215minus

= 2 k 0 = 22

= 1

si ha pertanto seguente successione limitata di indici di valore numerico decrescente sia pari che dispari k 9 = 714 k 8 = 357 k 7 = 178 k 6 = 89 k 5 = 44 k 4 = 22 k 3 = 11 k 2 = 5 k1 = 2 k 0 = 1

8

Sempre per lrsquoesempio riportato si puograve costituire cosigrave la seguente tabella esplicativa

iterazione Passaggio indici Formule U (k 1minusi ) U (k i ) V(k 1minusi ) V (k i )

d a k 1minusi a k i da usare

1 a k 0 = 1 k 1 = 2 (3b) e (4b) U(1) U(2) V(1) V(2)

2 a k 1 = 2 k 2 = 5 (7b) e (8b) U(2) U(5) V (2) V(5)

3 a k 2 = 5 k 3 = 11 (7b) e (8b) U(5) U(11) V (5) V(11)

4 a k 3 = 11 k 4 = 22 (3b) e (4b) U(11) U (22) V(11) V(22)

5 a k 4 = 22 k 5 = 44 (3b) e (4b) U(22) U (44) V22) V(44)

6 a k 5 = 44 k 6 = 89 (7b) e (8b) U(44) U (89) V(44) V(89)

7 a k 6 = 89 k 7 = 178 (3b) e (4b) U(89) U (178) V(89) V(178)

8 a k 7 = 178 k 8 = 357 (7b) e (8b) U(178) U (357) V(178) V(357)

9 a k 8 = 357 k 9 = 714 (3b) e (4b) U(357) U (714) V(357) V(714)

Si ribadisce ancora una volta che tutti i calcoli per trovare valori di U e di V sono da effettuare in aritmetica modulo p (mod p) Ciograve comporta che tutti i valori numerici dei diversi U(k) e V(k) trovati non saranno mai superiori a p Per il calcolo dellrsquooperazione di elevazione a potenza Q k (mod p) che compare nelle formule si puograve fare ricorso allrsquo algoritmo della esponenziazione modulare Osservando perograve la particolare successione di indici ottenuti si puograve evitare tale tipo di algoritmo che pur efficiente allungherebbe sia il numero di istruzioni nel programma sia anche i tempi do calcolo rispetto ad un algoritmo basato sostanzialmente sulla seguente considerazione si osservi che passando da una iterazione a quella successiva

ikQ risulta essere pari a ( )21minusikQ se lrsquoindice 1minusik egrave un numero pari

ikQ risulta essere pari a ( )21minusikQ middot Q se lrsquoindice 1minusik egrave un numero dispari

Naturalmente i suddetti valori devono essere sempre calcolati (mod p ) Per completezza si riportano qui di seguito partendo dai valori iniziali di U e di V i successivi valori numerici di U e di V trovati in ciascuna iterazione (it) valori iniziali U = 1 V = P = 3 1 a it U(2) = 3 V(2) = 103 2 a it U(5) = 705 V(5) = 1194 3 a it U(11) = 926 V(11) = 581 4 a it U(22) = 27 V(22) = 1218 5 a it U(44) = 65 V(44) = 892 6 a it U(89) = 582 V(89) = 726 7 a it U(178) = 140 V(178) = 597 8 a it U(357) = 0 V(357) = 885 9 a it U(714) = 0 V(714) = 1328

il risultato V(714) = 1328 della 9 a e ultima iterazione egrave il valore cercato V ⎟⎠⎞

⎜⎝⎛ +

21p

= V ⎟⎠⎞

⎜⎝⎛ +

211427

= = = =

= V(714) = 1328 che diviso per 2 da luogo ad una delle soluzioni della congruenza 1z = 2

)714(V =

21328

=

= 664 Lrsquoaltro valore della congruenza egrave immediato 2z = ndash 664 equiv p ndash 1z = 763 Si noti il valore 0 di

2)714(U

Egrave il caso di ricordare ancora una volta che tutti i valori numerici sono calcolati (mod p)

9

Risoluzione della Congruenza z 2 equiv Q (mod p) con valori di Q e p grandi Ersquo necessario a questo punto precisare quanto segue un calcolo per la congruenza relativa ad un modulo p piccolo come quello dellrsquoesempio sopra illustrato (p = 1427) potrebbe essere sviluppato anche piugrave opportunamente con un programma di calcolo con lrsquoalgoritmo di tipo esaustivo composto da poche istruzioni

formanti un ciclo di operazioni ripetuto al massimo 2p

Ciograve egrave vero per moduli p abbastanza piccoli ma si puograve giagrave constatare che nel risolvere una congruenza il cui modulo p sia un primo costituito da solo 8 cifre la differenza dei tempi di calcolo comincia a farsi sentire Ad esempio risolvendo la seguente congruenza z 2 equiv 3 (mod 85225897) su di uno stesso calcolatore e con lrsquoutilizzo di un medesimo linguaggio (Qbasic) si sono ottenuti i seguenti tempi di risoluzione - con algoritmo esaustivo un tempo di 31 secondi - con algoritmo illustrato un tempo praticamente immediato

Il calcolo in questo caso egrave stato effettuato tramite lrsquoesecuzione di un programma realizzato e scritto in linguaggio Qbasic relativo alla risoluzione di una qualsiasi congruenza quadratica avente valori di Q e di p non grandi tali cioegrave di poter risolvere la congruenza in modo esatto con lrsquoutilizzo della sola aritmetica in doppia precisione disponibile sul nel software utilizzato Pertanto nel nostre caso occorre che Q sia composto da non piugrave di 15 cifre e p da non piugrave di 7 cifre Il listato del programma egrave riportato nellrsquo Allegato 1 Per moduli p anche non eccessivamente grandi costituiti da appena 16 cifre si egrave potuto constatare tramite apposito programma a precisione multipla che mentre il tempo impiegato per conoscere se la congruenza egrave risolubile e in tal caso calcolarne le soluzioni egrave praticamente immediato con un programma esaustivo naturalmente estrapolando i tempi ottenuti per moduli p piccoli ( p con 7 cifre e 8 cifre) il tempo di calcolo sarebbe maggiore ai 10 anni Per moduli p con 20 cifre si potrebbe avere addirittura un tempo di verifica e calcolo superiore ai 50 mila anni Che sia importante realizzare un algoritmo e di conseguenza un programma con cui risolvere in tempi brevi le congruenze con valori per Q per p grandi risulta evidente non solo da un punto di vista euristico ma anche quando si deve effettuare la scomposizione in fattori di un numero composto grande Infatti in uno dei piugrave moderni ed efficienti metodi di fattorizzazione di numeri grandi vale a dire il metodo del ldquoCrivello Quadraticordquo (Quadratic Sieve) egrave indispensabile risolvere preliminarmente diverse congruenze quadratiche anche con moduli primi di discrete dimensioni [Kob] [Bre] [SI4 [SI5] [SI6] Inoltre pure nel il campo della crittografia risulta necessario poter risolvere questo tipo di congruenza (vedi piugrave avanti il paragrafo delle applicazioni tecniche) Pertanto si egrave realizzato un ulteriore programma sempre in linguaggio Qbasic dedicato a valori per p e per Q che possono avere valori grandi composti ciascuno anche da diverse decine di cifre In effetti esso egrave atto a risolvere una qualsiasi congruenza quadratica avente termine noto Q sia positivo che negativo costituito sino a qualche centinaia di cifre e con modulo p primo ldquolimitatordquo composto al massimo da 125 cifre Questo limite egrave determinato dallrsquoaver utilizzato nelle istruzioni un solo array bidimensionale (una matrice puograve essere composta al massimo da 8000 elementi nel software Qbasic) per incamerare e memorizzare tutti gli

appositi indici k (da sk = 2

1+p a 0k = 1) trovati con le regole sopraesposte relativi ai valori U(k) e V(k)

In tale programma non essendo sufficienti i calcoli in doppia precisione relativi a tutte le operazioni aritmetiche presenti nel listato del programma mostrato in Allegato 1 le analoghe operazioni aritmetiche vengono effettuate compresa la divisione in aritmetica a precisione multipla Ciograve comporta lrsquoesattezza di tutti i calcoli su numeri grandi e sui risultati ottenuti a scapito perograve di una piugrave onerosa realizzazione del programma dato il grande numero di istruzioni e la loro maggiore complessitagrave necessarie allrsquoesecuzione delle varie operazioni aritmetiche Non si egrave ritenuto opportuno allegare al presente articolo per non appesantirlo troppo il listato del suddetto programma data la sua non indifferente lunghezza In una Tabella sotto riportata sono illustrati comunque alcuni risultati di esempi di risoluzione relativi a congruenze quadratiche ottenuti utilizzando il programma suddetto Nella penultima colonna della tabella egrave mostrato il tempo di calcolo richiesto con lrsquoalgoritmo illustrato Tal nellrsquoultima colonna egrave mostrato invece il tempo di calcolo necessario con lrsquoalgoritmo di tipo esaustivo Tes i valori con sono dedotti ovviamente per estrapolazione dai tempi ottenuti per moduli p di 7 e di 8 cifre Si noti che egrave impensabile intraprendere un calcolo esaustivo per risolvere qualsiasi congruenza quadratica avente per modulo un primo p anche di solo 16 cifre Per una piugrave facile lettura dei valori numerici essi sono stati separati in gruppi di 7 cifre decimali come del resto calcolati nel programma avendo utilizzato per le

10

operazioni aritmetiche la Base (Radix) 710 di numerazione anzicheacute la normale Base 110 Si fa osservare che ad un gruppo di 7 cifre in base 10 si fa corrispondere una singola cifra in aritmetica in Base 710 Considerazioni sulla congruenza z 2 equiv Q (mod n ) con n composto Finora si sono considerate congruenze aventi come moduli numeri primi p Per diversi algoritmi crittografici occorre trovare i valori che soddisfano una congruenza del tipo z 2 equiv Q (mod n ) con n composto dal prodotto di due numeri primi cioegrave n = 21 pp sdot con 1p e 2p numeri primi grandi costituiti ciascuno anche da piugrave di 150 cifre decimali Cosa si puograve dire riguardo ad un tale tipo di congruenza quadratica In generale la risoluzione di una congruenza quadratica con modulo composto presenta le stesse difficoltagrave del problema della fattorizzazione di un numero in quanto il primo passo per la sua eventuale risoluzione egrave quello di scomporre in fattori il modulo n

In questo specifico caso perograve si supponga di conoscere a priori i fattori 1p e 2p che compongono il modulo Si supponga anche che n e Q siano primi tra loro cioegrave che si abbia (Q n) = 1 dove con tale simbologia viene indicato il Massimo Comun Divisore fra Q ed n Condizione indispensabile percheacute la congruenza z 2 equiv Q (mod 21 pp sdot ) sia risolubile egrave che siano risolubili entrambe le due seguenti congruenze z 2 equiv Q (mod 1p ) e z 2 equiv Q (mod 2p ) In effetti se anche una sola delle due congruenze non risulta risolubile anche la congruenza con modulo n = 21 pp sdot non lo egrave [Tch] [Nag] Una volta risolte le due congruenze quadratiche rispettivamente con modulo 1p e modulo 2p ciascuna delle quali presenteragrave due valori numerici che la soddisfano si avranno disponibili 4 congruenze lineari z equiv 11z (mod 1p ) z equiv 12z (mod 1p ) relative alla congruenza con modulo 1p z equiv 21z (mod 2p ) z equiv 22z (mod 2p ) relative alla congruenza con modulo 2p con le quali si possono formare 22 distinti sistemi di congruenze composti ciascuno da 2 congruenze lineariSi tenga presente che in uno qualsiasi di questi 4 sistemi non devono mai comparire due congruenze lineari i cui termini noti siano le soluzioni di una stessa congruenza quadratica Ersquo ben noto che per trovare una soluzione atta a soddisfare un insieme di congruenze lineari bisogna far ricorso al Teorema cinese dei resti Per detto teorema si puograve fare riferimento ad una vasta bibliografia di cui si riportano solo alcuni riferimenti [Bar] [Niv] [Wag] relativi anche ad indirizzi di Siti Internet [SI4][SI5] Questo teorema ci assicura che dato un insieme di congruenze lineari se i vari moduli delle congruenze sono relativamente primi fra loro esiste un valore comune tale da soddisfare simultaneamente ognuna della congruenze Utilizzandolo nel nostro caso avremo che un generico valore dei 4 valori di z 2 equiv Q (mod n ) che la soddisfano puograve essere trovato tramite la seguente formula

nz = iz1 middot 1b middot1p

n + iz2 middot 2b middot

2pn

con i = 12

dove ogni ib si ricava risolvendo la congruenza lineare ip

nmiddot ib equiv 1 ( mod ip )

Alcune applicazioni tecniche Vi sono delle interessanti applicazioni tecniche in cui vengono implicati e utilizzati argomenti trattati nel presente articolo specie nel campo delle telecomunicazioni e della crittografia Ci limiteremo ad elencare qui alcune di quelli indicati in [Shr] e in [Schn] Per i residui quadratici - Applicazione di successioni di residui quadratici nella progettazione riguardante unrsquoampia diffusione di onde sonore negli ambienti per migliorare la qualitagrave acustica - Possibili applicazioni nella copertura radar e sonar nella riduzione del rumore - Applicazione per la riduzione delle interferenze in particolare riguardo al ldquojammingrdquo nelle comunicazioni

11

via radio in cui egrave raccomandato lrsquouso di larghi spettri in effetti nellrsquoutilizzo di una stessa banda di frequenze fra piugrave utenti si puograve dimostrare che lrsquoattribuzione di particolari successioni di residui quadratici da assegnare ad ognuno di loro permette di ridurre al minimo le interferenze fra le varie trasmissioni pur essendo esse contemporanee Per le congruenze quadratiche Oltre al loro giagrave summenzionato utilizzo in uno dei piugrave efficienti metodi di scomposizione in fattori di numeri grandi (Quadratic Sieve Method) altre applicazioni riguardano soprattutto il campo della crittografia abbinata al campo delle telecomunicazioni quali ad esempio ndash il metodo crittografico di Rabin [Schn] vedi riquadro ndash il metodo di Ong ndash Shnorr- Shamir [Schn] relativo alla firma digitale ndash il metodo di zero ndash knowledge di Feige- Fiat - Shamir [Schn] dedicato allrsquorsquoautenticazione della firma

digitale Per le Sequenze di Lucas vi sono applicazioni che interessano sia crittosistemi a chiave pubblica come ad esempio il ldquoLUC Public Key Encriptionrdquo) valido quanto il crittosistema RSA sia test di primalitagrave Riguardo a questrsquoultimo argomento egrave da mettere in evidenza infatti che la ricerca e lrsquoindividuazione dei piugrave grandi numeri primi finora scoperti si egrave potuta realizzare grazie proprio allrsquoimpiego di dette sequenze METODO di RABIN

Il messaggio M viene crittografato secondo la relazione C equiv 2M ( mod N ) dove N egrave un numero composto dal prodotto di due grandi primi 1p e 2p ciascuno costituito da parecchie decine di cifre in ricezione lrsquoutente la cui chiave pubblica egrave il numero N

quando riceve il messaggio criptato C egrave lrsquounico a poterlo decifrare utilizzando le sue due chiavi segrete 1p e 2p Esso perograve deve

disporre di un algoritmo veloce ed efficace per decrittare il messaggio secondo la relazione 2z equiv C ( mod N ) la cui risoluzione

puograve essere effettuata solo risolvendo prima le due congruenze 2z equiv C (mod 1p ) e 2z equiv C (mod 2p ) quindi col ricorso del Teorema dei Resti Cinese risolvendo il sistema di due congruenze lineari impieganti le soluzioni delle suddette congruenze Si

dimostra infatti che uno dei quattro valori di z trovati che soddisfano la congruenza 2z equiv C ( mod N ) risulta essere il messaggio originale M Ersquo da osservare perograve che sussiste lrsquoambiguitagrave della scelta del messaggio effettivo fra i quattro valori di z Se il messaggio originale egrave un normale testo in italiano (o comunque in unrsquoaltra lingua) allora saragrave facile scegliere fra i quattro valori di z quello corretto In generale sussiste la suddetta ambiguitagrave ----------------------------------------------------------------------------- Un possibile metodo comunque non molto efficiente per ovviare a ciograve potrebbe essere il seguente lrsquoutente a cui egrave destinato il messaggio mette a disposizione due chiavi pubbliche 1N = 1p middot 2p e 2N = 3p middot 4p avendo come sue chiavi segrete i quattro

numeri primi 1p 2p 3p e 4p Esso riceveragrave pertanto due messaggi criptati 1C equiv 2M (mod 1N ) e 2C equiv 2M (mod

2N ) che decritteragrave risolvendo le due congruenze quadratiche 2z equiv 1C (mod 1N ) e 2z equiv 2C (mod 2N ) Si avranno cosigrave disponibili quattro valori risolutivi per la prima congruenza ed altri quattro per la seconda Osservando queste otto soluzioni solo due in generale saranno identiche una estratta fra le quattro della prima congruenza lrsquoaltra estratta dalle altre quattro relative alla seconda congruenza Saragrave pertanto questa soluzione comune il messaggio originale M Nota sui residui Occorre tener conto che sui residui ottenuti si possono effettuare se necessarie le seguenti operazioni lecite in aritmetica modulare 1 ) se rn lt 0 egrave il residuo negativo (mod p ) di un valore numerico negativo ndashR i molti casi risulta preferibile sostituire questo valore negativo rn con lrsquoequivalente (piugrave prossimo a 0) residuo rp positivo ( mod p) di ndashR che risulta essere rp = p - |rn| Tale sostituzione risulta indispensabile allorcheacute si devono effettuare i calcoli in aritmetica a precisione multipla su grandi valori numerici non sono trattabili neanche con lrsquoaritmetica la doppia precisione disponibile sul calcolatore nel linguaggio utilizzato 2) detto rd il residuo dispari di R ( mod p) per ottenere un intero quale residuo di rd 2 si calcola il

valore 2

prd + che saragrave senzrsquoaltro intero essendo pgt2 dispari

Questa operazione deve essere effettuata ad esempio quando nelle formule (7) e (8) utilizzate per il calcolo del residuo di 2middotU(2k+1) e di 2middotV(2k+1) il risultato dei calcoli (mod p) egrave un numero dispari dovendo trovare invece il residuo di U(2k+1) o di V(2k+1)

12

RIFERIMENTI [Bar] - GC Barozzi Aritmetica un approccio computazionale Zanichelli Bologna 1991 [Bre] - DMBressoud Factorization and Primality Testing Springer-Verlag New York 1989 [Cip] - MCipolla Teoria dei numeri Analisi Indeterminata in Enciclopedia delle Matematiche Elementari volI parte I Cap IV ndash Parte seconda - U Hoepli editore Milano [Dic] - L E Dickson ndash History of the Theory of Numbers Vol I ChapVII - Chelsea Publishing Company New York 1992 [Eul] - L Euler Eleacutemens drsquoAlgegravebre ndashTome second Analise Indetermineacutee Bachelier Librairie pour le Matheacutematiques Paris 1807 [Hur] - A Hurwitz ndash N Kritikos Lectures on Number Theory Springer-Verlag New York 1986 [Kob] - N Kobliz A Course in Number Theory and Criptography Springer-Verlag New York 1994 [Kra] - EKranakis Primality and Cryptography JWiley amp Sons 1986 [Lan] - E Landau Elementary Number Theory Chelsea Publishing Company New York 1966 Nag] - T Nagell Introduction to Number Theory Chelsea Publishing Company New York 1981 [Niv] - I Niven - HSZuckerman An Introduction to the Theory of Numbers JWiley amp Sons 1980 [Old] - CD Olds Frazioni continue Collana di Matematica Moderna ndash vol MM5 Zanichelli Bologna 1970 [Pom] - C Pomerance Alla ricerca dei numeri primi Le Scienze - quaderni n14 marzo 1984 [Rib] - P Ribenboim The Book of Prime Number Records Springer-Verlag New York 1989 [Rie] H Riesel Prime Number and Computer Methods for Factorization Birkhaumluser Boston 1985 [Rob] - G Robin Algorithmique et cryptographie Mathematiques amp Applications vol ndeg 8 (1991) Ellipses ndash Edition Marketing [Sch] - MR Schroeder La Teoria dei Numeri franco muzio amp ceditore Padova 1986 [Schn] - B Schneider Applied Cryptography John Wiley amp SInc New York [Tch] - P L Tchebichef Teoria delle Congruenze E Loescher amp Cdeg Roma 1895 [Te1] - C Teodoro La Generazione della chiave privata nellrsquoalgoritmo crittografico RSA a chiave pubblica in ldquomatematicamenteit ndash sezione Applicazioni Ingegneriardquo [Te2] - C Teodoro Un metodo per il calcolo veloce dei numeri di Fibonacci e di Lucas La Comunicazione anno 2001 Vol XLX [Wag] - SWagon Guida a Matematica ( capitoli 8 e 9) McGraw ndashHill Libri Italia srl Milano 1995 Siti Internet [SI0] - httpaieecsumichedupeopleroundsWinter02SlidesLectureApril4pdf [SI1] - http164813169Enciklopedijamathmathjj026htm [SI2] - httpwwwmathswtedu~hazprob_setsnotesnode34html [SI3] - httpmathworldwolframcomLucasSequencehtml [SI4] - httpmathworldwolframcomQuadraticSievehtml [SI5] - httpwwwmathksuedumath511notesiqs2000htm [SI6] - httpnethzchstudentralbrunnTQShtml [SI7] - httpmathworldwolframcomChinese Remainder Theoremhtml [SI8] - httpwwwmathswtedu~hazprob_setsnotesnode25html

Vengono riportati nelle pagine seguenti

- alcuni esempi di calcolo per congruenze con valori di q e di p non grandi ottenuti utilizzando il programma riportato in ALLEGATO 1

- una Tabella riguardante diversi risultati di risoluzione di congruenze quadratiche presentanti valori di Q e di p grandi e quindi risolte con lrsquoimpiego di apposito programma utilizzante una aritmetica a precisione multipla - altri esempi di calcolo per congruenze presentanti anche valori di Q e di p grandi risolte utilizzando un apposito programma con aritmetica a precisione multipla

13

ESEMPI di risoluzione della congruenza )(mod2 pQz equiv con lrsquoutilizzo del programma in Allegato 1

ESEMPIO n1 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q876543 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p113 k5 = 57 k4 = 28 k3 = 14 k2 = 7 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 5 1 ^it U( 3 ) = 23 V( 3 ) = 95 2 ^it U( 7 ) = 23 V( 7 ) = 76 3 ^it U( 14 ) = 53 V( 14 ) = 96 4 ^it U( 28 ) = 3 V( 28 ) = 65 5 ^it U( 57 ) = 0 V( 57 ) = 11 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 876543 (mod 113 )SONO z1 = 62 z2 = 51 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-7723 che (z2^2 - Q) p =-7734 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

14

ESEMPIO n2 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -47 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 1427 k9 = 714 k8 = 357 k7 = 178 k6 = 89 k5 = 44 k4 = 22 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 103 2 ^it U( 5 ) = 705 V( 5 ) = 1194 3 ^it U( 11 ) = 926 V( 11 ) = 581 4 ^it U( 22 ) = 27 V( 22 ) = 1218 5 ^it U( 44 ) = 65 V( 44 ) = 892 6 ^it U( 89 ) = 582 V( 89 ) = 726 7 ^it U( 178 ) = 140 V( 178 ) = 597 8 ^it U( 357 ) = 0 V( 357 ) = 885 9 ^it U( 714 ) = 0 V( 714 ) = 1328 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-47 (mod 1427 ) SONO z1 = 664 z2 = 763 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 309 che (z2^2 - Q) p = 408 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

6

Si dovranno poi prendere in considerazione le formule (3b ) e (4b) se lrsquoindice k i egrave di valore pari utilizzare invece le formule (7b) e(8b) se esso egrave di valore dispari Si puograve arrivare cosigrave al calcolo di U( sk ) e

di V( sk ) attraverso un ciclo limitato di s = ⎥⎦

⎥⎢⎣

⎢2

)(Log

kLog s iterazioni utilizzando gli indici trovati e

opportunamente memorizzati della successione Ersquo importante sottolineare che tutti i calcoli da effettuare sulle suddette formule sono da eseguirsi modulo p Ciograve significa che ogni risultato R di una qualsiasi operazione aritmetica qualora superi il valore p non puograve essere utilizzato come tale per una ulteriore operazione aritmetica al suo posto nel proseguimento dei calcoli deve essere utilizzato il resto r ottenuto dalla divisione di R per p Tutto ciograve viene indicato dicendo che le operazione aritmetiche sono effettuate ldquo(mod p)rdquo ed il valore r prende il nome di residuo modulo p di R Nel nostro caso per trovare lrsquoopportuna successione di indici di

valore numerico decrescente si deve partire dallrsquoindice sk =2

1+p

Avendo a disposizione la successione desiderata degli indici percheacute preventivamente memorizzata si parta ora dallrsquoindice k 0 = 1 e dai valori conosciuti di U(k 0 ) =1 e di V(k 0 ) = P risalendo poi passo passo tenendo conto dei particolari indici trovati della successione di valore sempre piugrave grande si egrave in grado di calcolare con le formule a disposizione i valori di U(k i ) e di V(k i ) relativi allrsquoindice k i utilizzando unicamente i valori di U(k 1minusi ) di V(k 1minusi ) e dellrsquoindice k 1minusi oltre naturalmente i valori del coefficiente noto Q e dei valori di P e D Il calcolo di U(k i ) e di V(k i ) potragrave quindi essere effettuato con i valori di U(k 1minusi ) e di V(k 1minusi ) giagrave trovati nellrsquoiterazione precedente dellrsquoindice k i preventivamente calcolato e dei termini noti Q P e D Si dovranno poi prendere come giagrave detto in considerazione le formule (3b) e (4b) se lrsquoindice k i egrave di valore pari si dovranno invece utilizzare le formule (7b) e(8b) se esso egrave di valore dispari

Pertanto attraverso il calcolo di un numero limitato di iterazioni pari a ⎥⎦

⎥⎢⎣

⎢2Log

Logks con sk = 2

1+p partendo

dallrsquoindice k 0 = 1 si possono trovare i valori di U( sk ) e di V( sk ) desiderati Esempio Vediamo di chiarire meglio tutto quanto finora esposto con un esempio molto semplice ma significativo I risultati qui esposti sono stati trovati con il programma il cui listato egrave riportato in Allegato 1 del presente articolo Si voglia risolvere la semplice congruenza z 2 equiv ndash 47 (mod 1427) dove Q = ndash 47 e p = 1427 Si sia giagrave verificato che il numero 1427 egrave primo per cui q e p sono primi fra loro essendo q lt p Si deve vedere ora se la congruenza egrave risolubile o meno calcolando il valore del simbolo di Jacobi

⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

= ⎟⎠⎞

⎜⎝⎛ minus1427

47

Piugrave che effettuare il calcolo diretto cercando il valore assunto da Q 21minusp

= 10 211427minus

(mod 1427) con lrsquoalgoritmo di esponenziazione modulare egrave conveniente utilizzare un algoritmo che utilizzi le formule c1 c2 c3 c4 e c5 sopra riportate con le quali si puograve realizzare un piugrave efficiente e veloce algoritmo di calcolo Ad esempio con i presenti valori impiegando il primo algoritmo sono necessarie 9 iterazioni con il secondo sono necessarie solo 4 iterazioni In generale lrsquouso del secondo algoritmo egrave tanto piugrave conveniente quanto piugrave grandi sono i valori di p Se il

valore di ⎟⎟⎠

⎞⎜⎜⎝

⎛pQ

egrave ndash1 la congruenza non egrave risolubile e quindi la ricerca termina Tornando alla congruenza

z 2 equiv ndash 47 (mod 1427) ed al relativo Simbolo di Jacobi = ⎟⎠⎞

⎜⎝⎛ minus1427

47 si ottiene per esso un valore + 1 per cui

egrave lecito proseguire nella risoluzione della congruenza

7

Proseguendo si deve trovare ora il minimo valore di P tale per cui D = P 2 ndash 4Q sia un non residuo quadratico di P Partendo con un valore di P = 1 si prosegue eventualmente con P =2 3 4 hellip

Ci si ferma nella ricerca allorcheacute il simbolo di Jacobi ⎟⎟⎠

⎞⎜⎜⎝

⎛ minusp

QP 4 risulta = ndash1

Utilizzando pertanto lo stesso algoritmo usato per il calcolo del simbolo di Jacobi partendo da un valore P = 1 dopo un numero limitato di iterazioni (in questo esempio bastano 3 iterazioni) si trova che per

P = 3 e quindi per D = 23 ndash 4middot (ndash 47) = 197 il simbolo di Jacobi ⎟⎠⎞

⎜⎝⎛1427197

vale ndash1 Applicando quanto

richiesto al punto e ) le formule (3bis) (4bis) (7bis) e (8bis) con i valori Q = ndash 47 P = 3 e D = 197 diventano per questo esempio le seguenti U(k i ) = U (k 1minusi )middotV(k 1minusi ) (3b)

V(k i ) = V(k 1minusi ) 2 ndash 2middot(- 47) 1minusik (4b)

2middotU(k i ) = 3middotU (k 1minusi )middotV(k 1minusi ) + V(k 1minusi ) 2 ndash 2middot(- 47) 1minusik (7b)

2middotV(k i ) = 3middotV(k 1minusi ) 2 + 197middotU (k 1minusi )middotV(k 1minusi ) ndash 2middot3middot(- 47) 1minusik (8b)

tramite le quali con un ciclo iterativo di operazioni (modulo p) si deve calcolare il valore di

2)( skV

(mod p) per sk = 2

1+p dove p = 1427 Il numero di iterazioni saragrave pari a ⎥

⎥⎢⎣

⎢2

)(Log

kLog s = 9

Vediamo ora di trovare la successione di indici k per arrivare al calcolo di V ⎟⎠⎞

⎜⎝⎛ +

211427

= V (714)

Innanzitutto la successione incluso lrsquoindice iniziale noto sk = 714 sino allrsquo indice k 0 = 1 egrave composta

da s +1 indici dove s = ⎥⎦

⎥⎢⎣

⎢2

714Log

Log = 9 Con le regole citate partendo da sk = 9k =

211427 +

= 714 si

possono calcolare gli altri valori decrescenti dei successivi indici k poicheacute sk egrave pari si ottiene 1minussk =

= 8k = 2

714 = 357 che essendo dispari daragrave luogo a sua volta ad un indice 2minussk = 7k di valore

21357 minus

=

= 178 Questo indice di valore pari daragrave luogo allrsquoindice 3minussk = 6k = 2

178 = 89 proseguendo con il

calcolo dei successivi indici si otterranno i seguenti valori

k 5 = 2

189 minus = 44 k 4 =

244

= 22 3k =222

= 11 2k = 2

111minus = 5 1k =

215minus

= 2 k 0 = 22

= 1

si ha pertanto seguente successione limitata di indici di valore numerico decrescente sia pari che dispari k 9 = 714 k 8 = 357 k 7 = 178 k 6 = 89 k 5 = 44 k 4 = 22 k 3 = 11 k 2 = 5 k1 = 2 k 0 = 1

8

Sempre per lrsquoesempio riportato si puograve costituire cosigrave la seguente tabella esplicativa

iterazione Passaggio indici Formule U (k 1minusi ) U (k i ) V(k 1minusi ) V (k i )

d a k 1minusi a k i da usare

1 a k 0 = 1 k 1 = 2 (3b) e (4b) U(1) U(2) V(1) V(2)

2 a k 1 = 2 k 2 = 5 (7b) e (8b) U(2) U(5) V (2) V(5)

3 a k 2 = 5 k 3 = 11 (7b) e (8b) U(5) U(11) V (5) V(11)

4 a k 3 = 11 k 4 = 22 (3b) e (4b) U(11) U (22) V(11) V(22)

5 a k 4 = 22 k 5 = 44 (3b) e (4b) U(22) U (44) V22) V(44)

6 a k 5 = 44 k 6 = 89 (7b) e (8b) U(44) U (89) V(44) V(89)

7 a k 6 = 89 k 7 = 178 (3b) e (4b) U(89) U (178) V(89) V(178)

8 a k 7 = 178 k 8 = 357 (7b) e (8b) U(178) U (357) V(178) V(357)

9 a k 8 = 357 k 9 = 714 (3b) e (4b) U(357) U (714) V(357) V(714)

Si ribadisce ancora una volta che tutti i calcoli per trovare valori di U e di V sono da effettuare in aritmetica modulo p (mod p) Ciograve comporta che tutti i valori numerici dei diversi U(k) e V(k) trovati non saranno mai superiori a p Per il calcolo dellrsquooperazione di elevazione a potenza Q k (mod p) che compare nelle formule si puograve fare ricorso allrsquo algoritmo della esponenziazione modulare Osservando perograve la particolare successione di indici ottenuti si puograve evitare tale tipo di algoritmo che pur efficiente allungherebbe sia il numero di istruzioni nel programma sia anche i tempi do calcolo rispetto ad un algoritmo basato sostanzialmente sulla seguente considerazione si osservi che passando da una iterazione a quella successiva

ikQ risulta essere pari a ( )21minusikQ se lrsquoindice 1minusik egrave un numero pari

ikQ risulta essere pari a ( )21minusikQ middot Q se lrsquoindice 1minusik egrave un numero dispari

Naturalmente i suddetti valori devono essere sempre calcolati (mod p ) Per completezza si riportano qui di seguito partendo dai valori iniziali di U e di V i successivi valori numerici di U e di V trovati in ciascuna iterazione (it) valori iniziali U = 1 V = P = 3 1 a it U(2) = 3 V(2) = 103 2 a it U(5) = 705 V(5) = 1194 3 a it U(11) = 926 V(11) = 581 4 a it U(22) = 27 V(22) = 1218 5 a it U(44) = 65 V(44) = 892 6 a it U(89) = 582 V(89) = 726 7 a it U(178) = 140 V(178) = 597 8 a it U(357) = 0 V(357) = 885 9 a it U(714) = 0 V(714) = 1328

il risultato V(714) = 1328 della 9 a e ultima iterazione egrave il valore cercato V ⎟⎠⎞

⎜⎝⎛ +

21p

= V ⎟⎠⎞

⎜⎝⎛ +

211427

= = = =

= V(714) = 1328 che diviso per 2 da luogo ad una delle soluzioni della congruenza 1z = 2

)714(V =

21328

=

= 664 Lrsquoaltro valore della congruenza egrave immediato 2z = ndash 664 equiv p ndash 1z = 763 Si noti il valore 0 di

2)714(U

Egrave il caso di ricordare ancora una volta che tutti i valori numerici sono calcolati (mod p)

9

Risoluzione della Congruenza z 2 equiv Q (mod p) con valori di Q e p grandi Ersquo necessario a questo punto precisare quanto segue un calcolo per la congruenza relativa ad un modulo p piccolo come quello dellrsquoesempio sopra illustrato (p = 1427) potrebbe essere sviluppato anche piugrave opportunamente con un programma di calcolo con lrsquoalgoritmo di tipo esaustivo composto da poche istruzioni

formanti un ciclo di operazioni ripetuto al massimo 2p

Ciograve egrave vero per moduli p abbastanza piccoli ma si puograve giagrave constatare che nel risolvere una congruenza il cui modulo p sia un primo costituito da solo 8 cifre la differenza dei tempi di calcolo comincia a farsi sentire Ad esempio risolvendo la seguente congruenza z 2 equiv 3 (mod 85225897) su di uno stesso calcolatore e con lrsquoutilizzo di un medesimo linguaggio (Qbasic) si sono ottenuti i seguenti tempi di risoluzione - con algoritmo esaustivo un tempo di 31 secondi - con algoritmo illustrato un tempo praticamente immediato

Il calcolo in questo caso egrave stato effettuato tramite lrsquoesecuzione di un programma realizzato e scritto in linguaggio Qbasic relativo alla risoluzione di una qualsiasi congruenza quadratica avente valori di Q e di p non grandi tali cioegrave di poter risolvere la congruenza in modo esatto con lrsquoutilizzo della sola aritmetica in doppia precisione disponibile sul nel software utilizzato Pertanto nel nostre caso occorre che Q sia composto da non piugrave di 15 cifre e p da non piugrave di 7 cifre Il listato del programma egrave riportato nellrsquo Allegato 1 Per moduli p anche non eccessivamente grandi costituiti da appena 16 cifre si egrave potuto constatare tramite apposito programma a precisione multipla che mentre il tempo impiegato per conoscere se la congruenza egrave risolubile e in tal caso calcolarne le soluzioni egrave praticamente immediato con un programma esaustivo naturalmente estrapolando i tempi ottenuti per moduli p piccoli ( p con 7 cifre e 8 cifre) il tempo di calcolo sarebbe maggiore ai 10 anni Per moduli p con 20 cifre si potrebbe avere addirittura un tempo di verifica e calcolo superiore ai 50 mila anni Che sia importante realizzare un algoritmo e di conseguenza un programma con cui risolvere in tempi brevi le congruenze con valori per Q per p grandi risulta evidente non solo da un punto di vista euristico ma anche quando si deve effettuare la scomposizione in fattori di un numero composto grande Infatti in uno dei piugrave moderni ed efficienti metodi di fattorizzazione di numeri grandi vale a dire il metodo del ldquoCrivello Quadraticordquo (Quadratic Sieve) egrave indispensabile risolvere preliminarmente diverse congruenze quadratiche anche con moduli primi di discrete dimensioni [Kob] [Bre] [SI4 [SI5] [SI6] Inoltre pure nel il campo della crittografia risulta necessario poter risolvere questo tipo di congruenza (vedi piugrave avanti il paragrafo delle applicazioni tecniche) Pertanto si egrave realizzato un ulteriore programma sempre in linguaggio Qbasic dedicato a valori per p e per Q che possono avere valori grandi composti ciascuno anche da diverse decine di cifre In effetti esso egrave atto a risolvere una qualsiasi congruenza quadratica avente termine noto Q sia positivo che negativo costituito sino a qualche centinaia di cifre e con modulo p primo ldquolimitatordquo composto al massimo da 125 cifre Questo limite egrave determinato dallrsquoaver utilizzato nelle istruzioni un solo array bidimensionale (una matrice puograve essere composta al massimo da 8000 elementi nel software Qbasic) per incamerare e memorizzare tutti gli

appositi indici k (da sk = 2

1+p a 0k = 1) trovati con le regole sopraesposte relativi ai valori U(k) e V(k)

In tale programma non essendo sufficienti i calcoli in doppia precisione relativi a tutte le operazioni aritmetiche presenti nel listato del programma mostrato in Allegato 1 le analoghe operazioni aritmetiche vengono effettuate compresa la divisione in aritmetica a precisione multipla Ciograve comporta lrsquoesattezza di tutti i calcoli su numeri grandi e sui risultati ottenuti a scapito perograve di una piugrave onerosa realizzazione del programma dato il grande numero di istruzioni e la loro maggiore complessitagrave necessarie allrsquoesecuzione delle varie operazioni aritmetiche Non si egrave ritenuto opportuno allegare al presente articolo per non appesantirlo troppo il listato del suddetto programma data la sua non indifferente lunghezza In una Tabella sotto riportata sono illustrati comunque alcuni risultati di esempi di risoluzione relativi a congruenze quadratiche ottenuti utilizzando il programma suddetto Nella penultima colonna della tabella egrave mostrato il tempo di calcolo richiesto con lrsquoalgoritmo illustrato Tal nellrsquoultima colonna egrave mostrato invece il tempo di calcolo necessario con lrsquoalgoritmo di tipo esaustivo Tes i valori con sono dedotti ovviamente per estrapolazione dai tempi ottenuti per moduli p di 7 e di 8 cifre Si noti che egrave impensabile intraprendere un calcolo esaustivo per risolvere qualsiasi congruenza quadratica avente per modulo un primo p anche di solo 16 cifre Per una piugrave facile lettura dei valori numerici essi sono stati separati in gruppi di 7 cifre decimali come del resto calcolati nel programma avendo utilizzato per le

10

operazioni aritmetiche la Base (Radix) 710 di numerazione anzicheacute la normale Base 110 Si fa osservare che ad un gruppo di 7 cifre in base 10 si fa corrispondere una singola cifra in aritmetica in Base 710 Considerazioni sulla congruenza z 2 equiv Q (mod n ) con n composto Finora si sono considerate congruenze aventi come moduli numeri primi p Per diversi algoritmi crittografici occorre trovare i valori che soddisfano una congruenza del tipo z 2 equiv Q (mod n ) con n composto dal prodotto di due numeri primi cioegrave n = 21 pp sdot con 1p e 2p numeri primi grandi costituiti ciascuno anche da piugrave di 150 cifre decimali Cosa si puograve dire riguardo ad un tale tipo di congruenza quadratica In generale la risoluzione di una congruenza quadratica con modulo composto presenta le stesse difficoltagrave del problema della fattorizzazione di un numero in quanto il primo passo per la sua eventuale risoluzione egrave quello di scomporre in fattori il modulo n

In questo specifico caso perograve si supponga di conoscere a priori i fattori 1p e 2p che compongono il modulo Si supponga anche che n e Q siano primi tra loro cioegrave che si abbia (Q n) = 1 dove con tale simbologia viene indicato il Massimo Comun Divisore fra Q ed n Condizione indispensabile percheacute la congruenza z 2 equiv Q (mod 21 pp sdot ) sia risolubile egrave che siano risolubili entrambe le due seguenti congruenze z 2 equiv Q (mod 1p ) e z 2 equiv Q (mod 2p ) In effetti se anche una sola delle due congruenze non risulta risolubile anche la congruenza con modulo n = 21 pp sdot non lo egrave [Tch] [Nag] Una volta risolte le due congruenze quadratiche rispettivamente con modulo 1p e modulo 2p ciascuna delle quali presenteragrave due valori numerici che la soddisfano si avranno disponibili 4 congruenze lineari z equiv 11z (mod 1p ) z equiv 12z (mod 1p ) relative alla congruenza con modulo 1p z equiv 21z (mod 2p ) z equiv 22z (mod 2p ) relative alla congruenza con modulo 2p con le quali si possono formare 22 distinti sistemi di congruenze composti ciascuno da 2 congruenze lineariSi tenga presente che in uno qualsiasi di questi 4 sistemi non devono mai comparire due congruenze lineari i cui termini noti siano le soluzioni di una stessa congruenza quadratica Ersquo ben noto che per trovare una soluzione atta a soddisfare un insieme di congruenze lineari bisogna far ricorso al Teorema cinese dei resti Per detto teorema si puograve fare riferimento ad una vasta bibliografia di cui si riportano solo alcuni riferimenti [Bar] [Niv] [Wag] relativi anche ad indirizzi di Siti Internet [SI4][SI5] Questo teorema ci assicura che dato un insieme di congruenze lineari se i vari moduli delle congruenze sono relativamente primi fra loro esiste un valore comune tale da soddisfare simultaneamente ognuna della congruenze Utilizzandolo nel nostro caso avremo che un generico valore dei 4 valori di z 2 equiv Q (mod n ) che la soddisfano puograve essere trovato tramite la seguente formula

nz = iz1 middot 1b middot1p

n + iz2 middot 2b middot

2pn

con i = 12

dove ogni ib si ricava risolvendo la congruenza lineare ip

nmiddot ib equiv 1 ( mod ip )

Alcune applicazioni tecniche Vi sono delle interessanti applicazioni tecniche in cui vengono implicati e utilizzati argomenti trattati nel presente articolo specie nel campo delle telecomunicazioni e della crittografia Ci limiteremo ad elencare qui alcune di quelli indicati in [Shr] e in [Schn] Per i residui quadratici - Applicazione di successioni di residui quadratici nella progettazione riguardante unrsquoampia diffusione di onde sonore negli ambienti per migliorare la qualitagrave acustica - Possibili applicazioni nella copertura radar e sonar nella riduzione del rumore - Applicazione per la riduzione delle interferenze in particolare riguardo al ldquojammingrdquo nelle comunicazioni

11

via radio in cui egrave raccomandato lrsquouso di larghi spettri in effetti nellrsquoutilizzo di una stessa banda di frequenze fra piugrave utenti si puograve dimostrare che lrsquoattribuzione di particolari successioni di residui quadratici da assegnare ad ognuno di loro permette di ridurre al minimo le interferenze fra le varie trasmissioni pur essendo esse contemporanee Per le congruenze quadratiche Oltre al loro giagrave summenzionato utilizzo in uno dei piugrave efficienti metodi di scomposizione in fattori di numeri grandi (Quadratic Sieve Method) altre applicazioni riguardano soprattutto il campo della crittografia abbinata al campo delle telecomunicazioni quali ad esempio ndash il metodo crittografico di Rabin [Schn] vedi riquadro ndash il metodo di Ong ndash Shnorr- Shamir [Schn] relativo alla firma digitale ndash il metodo di zero ndash knowledge di Feige- Fiat - Shamir [Schn] dedicato allrsquorsquoautenticazione della firma

digitale Per le Sequenze di Lucas vi sono applicazioni che interessano sia crittosistemi a chiave pubblica come ad esempio il ldquoLUC Public Key Encriptionrdquo) valido quanto il crittosistema RSA sia test di primalitagrave Riguardo a questrsquoultimo argomento egrave da mettere in evidenza infatti che la ricerca e lrsquoindividuazione dei piugrave grandi numeri primi finora scoperti si egrave potuta realizzare grazie proprio allrsquoimpiego di dette sequenze METODO di RABIN

Il messaggio M viene crittografato secondo la relazione C equiv 2M ( mod N ) dove N egrave un numero composto dal prodotto di due grandi primi 1p e 2p ciascuno costituito da parecchie decine di cifre in ricezione lrsquoutente la cui chiave pubblica egrave il numero N

quando riceve il messaggio criptato C egrave lrsquounico a poterlo decifrare utilizzando le sue due chiavi segrete 1p e 2p Esso perograve deve

disporre di un algoritmo veloce ed efficace per decrittare il messaggio secondo la relazione 2z equiv C ( mod N ) la cui risoluzione

puograve essere effettuata solo risolvendo prima le due congruenze 2z equiv C (mod 1p ) e 2z equiv C (mod 2p ) quindi col ricorso del Teorema dei Resti Cinese risolvendo il sistema di due congruenze lineari impieganti le soluzioni delle suddette congruenze Si

dimostra infatti che uno dei quattro valori di z trovati che soddisfano la congruenza 2z equiv C ( mod N ) risulta essere il messaggio originale M Ersquo da osservare perograve che sussiste lrsquoambiguitagrave della scelta del messaggio effettivo fra i quattro valori di z Se il messaggio originale egrave un normale testo in italiano (o comunque in unrsquoaltra lingua) allora saragrave facile scegliere fra i quattro valori di z quello corretto In generale sussiste la suddetta ambiguitagrave ----------------------------------------------------------------------------- Un possibile metodo comunque non molto efficiente per ovviare a ciograve potrebbe essere il seguente lrsquoutente a cui egrave destinato il messaggio mette a disposizione due chiavi pubbliche 1N = 1p middot 2p e 2N = 3p middot 4p avendo come sue chiavi segrete i quattro

numeri primi 1p 2p 3p e 4p Esso riceveragrave pertanto due messaggi criptati 1C equiv 2M (mod 1N ) e 2C equiv 2M (mod

2N ) che decritteragrave risolvendo le due congruenze quadratiche 2z equiv 1C (mod 1N ) e 2z equiv 2C (mod 2N ) Si avranno cosigrave disponibili quattro valori risolutivi per la prima congruenza ed altri quattro per la seconda Osservando queste otto soluzioni solo due in generale saranno identiche una estratta fra le quattro della prima congruenza lrsquoaltra estratta dalle altre quattro relative alla seconda congruenza Saragrave pertanto questa soluzione comune il messaggio originale M Nota sui residui Occorre tener conto che sui residui ottenuti si possono effettuare se necessarie le seguenti operazioni lecite in aritmetica modulare 1 ) se rn lt 0 egrave il residuo negativo (mod p ) di un valore numerico negativo ndashR i molti casi risulta preferibile sostituire questo valore negativo rn con lrsquoequivalente (piugrave prossimo a 0) residuo rp positivo ( mod p) di ndashR che risulta essere rp = p - |rn| Tale sostituzione risulta indispensabile allorcheacute si devono effettuare i calcoli in aritmetica a precisione multipla su grandi valori numerici non sono trattabili neanche con lrsquoaritmetica la doppia precisione disponibile sul calcolatore nel linguaggio utilizzato 2) detto rd il residuo dispari di R ( mod p) per ottenere un intero quale residuo di rd 2 si calcola il

valore 2

prd + che saragrave senzrsquoaltro intero essendo pgt2 dispari

Questa operazione deve essere effettuata ad esempio quando nelle formule (7) e (8) utilizzate per il calcolo del residuo di 2middotU(2k+1) e di 2middotV(2k+1) il risultato dei calcoli (mod p) egrave un numero dispari dovendo trovare invece il residuo di U(2k+1) o di V(2k+1)

12

RIFERIMENTI [Bar] - GC Barozzi Aritmetica un approccio computazionale Zanichelli Bologna 1991 [Bre] - DMBressoud Factorization and Primality Testing Springer-Verlag New York 1989 [Cip] - MCipolla Teoria dei numeri Analisi Indeterminata in Enciclopedia delle Matematiche Elementari volI parte I Cap IV ndash Parte seconda - U Hoepli editore Milano [Dic] - L E Dickson ndash History of the Theory of Numbers Vol I ChapVII - Chelsea Publishing Company New York 1992 [Eul] - L Euler Eleacutemens drsquoAlgegravebre ndashTome second Analise Indetermineacutee Bachelier Librairie pour le Matheacutematiques Paris 1807 [Hur] - A Hurwitz ndash N Kritikos Lectures on Number Theory Springer-Verlag New York 1986 [Kob] - N Kobliz A Course in Number Theory and Criptography Springer-Verlag New York 1994 [Kra] - EKranakis Primality and Cryptography JWiley amp Sons 1986 [Lan] - E Landau Elementary Number Theory Chelsea Publishing Company New York 1966 Nag] - T Nagell Introduction to Number Theory Chelsea Publishing Company New York 1981 [Niv] - I Niven - HSZuckerman An Introduction to the Theory of Numbers JWiley amp Sons 1980 [Old] - CD Olds Frazioni continue Collana di Matematica Moderna ndash vol MM5 Zanichelli Bologna 1970 [Pom] - C Pomerance Alla ricerca dei numeri primi Le Scienze - quaderni n14 marzo 1984 [Rib] - P Ribenboim The Book of Prime Number Records Springer-Verlag New York 1989 [Rie] H Riesel Prime Number and Computer Methods for Factorization Birkhaumluser Boston 1985 [Rob] - G Robin Algorithmique et cryptographie Mathematiques amp Applications vol ndeg 8 (1991) Ellipses ndash Edition Marketing [Sch] - MR Schroeder La Teoria dei Numeri franco muzio amp ceditore Padova 1986 [Schn] - B Schneider Applied Cryptography John Wiley amp SInc New York [Tch] - P L Tchebichef Teoria delle Congruenze E Loescher amp Cdeg Roma 1895 [Te1] - C Teodoro La Generazione della chiave privata nellrsquoalgoritmo crittografico RSA a chiave pubblica in ldquomatematicamenteit ndash sezione Applicazioni Ingegneriardquo [Te2] - C Teodoro Un metodo per il calcolo veloce dei numeri di Fibonacci e di Lucas La Comunicazione anno 2001 Vol XLX [Wag] - SWagon Guida a Matematica ( capitoli 8 e 9) McGraw ndashHill Libri Italia srl Milano 1995 Siti Internet [SI0] - httpaieecsumichedupeopleroundsWinter02SlidesLectureApril4pdf [SI1] - http164813169Enciklopedijamathmathjj026htm [SI2] - httpwwwmathswtedu~hazprob_setsnotesnode34html [SI3] - httpmathworldwolframcomLucasSequencehtml [SI4] - httpmathworldwolframcomQuadraticSievehtml [SI5] - httpwwwmathksuedumath511notesiqs2000htm [SI6] - httpnethzchstudentralbrunnTQShtml [SI7] - httpmathworldwolframcomChinese Remainder Theoremhtml [SI8] - httpwwwmathswtedu~hazprob_setsnotesnode25html

Vengono riportati nelle pagine seguenti

- alcuni esempi di calcolo per congruenze con valori di q e di p non grandi ottenuti utilizzando il programma riportato in ALLEGATO 1

- una Tabella riguardante diversi risultati di risoluzione di congruenze quadratiche presentanti valori di Q e di p grandi e quindi risolte con lrsquoimpiego di apposito programma utilizzante una aritmetica a precisione multipla - altri esempi di calcolo per congruenze presentanti anche valori di Q e di p grandi risolte utilizzando un apposito programma con aritmetica a precisione multipla

13

ESEMPI di risoluzione della congruenza )(mod2 pQz equiv con lrsquoutilizzo del programma in Allegato 1

ESEMPIO n1 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q876543 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p113 k5 = 57 k4 = 28 k3 = 14 k2 = 7 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 5 1 ^it U( 3 ) = 23 V( 3 ) = 95 2 ^it U( 7 ) = 23 V( 7 ) = 76 3 ^it U( 14 ) = 53 V( 14 ) = 96 4 ^it U( 28 ) = 3 V( 28 ) = 65 5 ^it U( 57 ) = 0 V( 57 ) = 11 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 876543 (mod 113 )SONO z1 = 62 z2 = 51 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-7723 che (z2^2 - Q) p =-7734 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

14

ESEMPIO n2 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -47 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 1427 k9 = 714 k8 = 357 k7 = 178 k6 = 89 k5 = 44 k4 = 22 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 103 2 ^it U( 5 ) = 705 V( 5 ) = 1194 3 ^it U( 11 ) = 926 V( 11 ) = 581 4 ^it U( 22 ) = 27 V( 22 ) = 1218 5 ^it U( 44 ) = 65 V( 44 ) = 892 6 ^it U( 89 ) = 582 V( 89 ) = 726 7 ^it U( 178 ) = 140 V( 178 ) = 597 8 ^it U( 357 ) = 0 V( 357 ) = 885 9 ^it U( 714 ) = 0 V( 714 ) = 1328 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-47 (mod 1427 ) SONO z1 = 664 z2 = 763 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 309 che (z2^2 - Q) p = 408 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

7

Proseguendo si deve trovare ora il minimo valore di P tale per cui D = P 2 ndash 4Q sia un non residuo quadratico di P Partendo con un valore di P = 1 si prosegue eventualmente con P =2 3 4 hellip

Ci si ferma nella ricerca allorcheacute il simbolo di Jacobi ⎟⎟⎠

⎞⎜⎜⎝

⎛ minusp

QP 4 risulta = ndash1

Utilizzando pertanto lo stesso algoritmo usato per il calcolo del simbolo di Jacobi partendo da un valore P = 1 dopo un numero limitato di iterazioni (in questo esempio bastano 3 iterazioni) si trova che per

P = 3 e quindi per D = 23 ndash 4middot (ndash 47) = 197 il simbolo di Jacobi ⎟⎠⎞

⎜⎝⎛1427197

vale ndash1 Applicando quanto

richiesto al punto e ) le formule (3bis) (4bis) (7bis) e (8bis) con i valori Q = ndash 47 P = 3 e D = 197 diventano per questo esempio le seguenti U(k i ) = U (k 1minusi )middotV(k 1minusi ) (3b)

V(k i ) = V(k 1minusi ) 2 ndash 2middot(- 47) 1minusik (4b)

2middotU(k i ) = 3middotU (k 1minusi )middotV(k 1minusi ) + V(k 1minusi ) 2 ndash 2middot(- 47) 1minusik (7b)

2middotV(k i ) = 3middotV(k 1minusi ) 2 + 197middotU (k 1minusi )middotV(k 1minusi ) ndash 2middot3middot(- 47) 1minusik (8b)

tramite le quali con un ciclo iterativo di operazioni (modulo p) si deve calcolare il valore di

2)( skV

(mod p) per sk = 2

1+p dove p = 1427 Il numero di iterazioni saragrave pari a ⎥

⎥⎢⎣

⎢2

)(Log

kLog s = 9

Vediamo ora di trovare la successione di indici k per arrivare al calcolo di V ⎟⎠⎞

⎜⎝⎛ +

211427

= V (714)

Innanzitutto la successione incluso lrsquoindice iniziale noto sk = 714 sino allrsquo indice k 0 = 1 egrave composta

da s +1 indici dove s = ⎥⎦

⎥⎢⎣

⎢2

714Log

Log = 9 Con le regole citate partendo da sk = 9k =

211427 +

= 714 si

possono calcolare gli altri valori decrescenti dei successivi indici k poicheacute sk egrave pari si ottiene 1minussk =

= 8k = 2

714 = 357 che essendo dispari daragrave luogo a sua volta ad un indice 2minussk = 7k di valore

21357 minus

=

= 178 Questo indice di valore pari daragrave luogo allrsquoindice 3minussk = 6k = 2

178 = 89 proseguendo con il

calcolo dei successivi indici si otterranno i seguenti valori

k 5 = 2

189 minus = 44 k 4 =

244

= 22 3k =222

= 11 2k = 2

111minus = 5 1k =

215minus

= 2 k 0 = 22

= 1

si ha pertanto seguente successione limitata di indici di valore numerico decrescente sia pari che dispari k 9 = 714 k 8 = 357 k 7 = 178 k 6 = 89 k 5 = 44 k 4 = 22 k 3 = 11 k 2 = 5 k1 = 2 k 0 = 1

8

Sempre per lrsquoesempio riportato si puograve costituire cosigrave la seguente tabella esplicativa

iterazione Passaggio indici Formule U (k 1minusi ) U (k i ) V(k 1minusi ) V (k i )

d a k 1minusi a k i da usare

1 a k 0 = 1 k 1 = 2 (3b) e (4b) U(1) U(2) V(1) V(2)

2 a k 1 = 2 k 2 = 5 (7b) e (8b) U(2) U(5) V (2) V(5)

3 a k 2 = 5 k 3 = 11 (7b) e (8b) U(5) U(11) V (5) V(11)

4 a k 3 = 11 k 4 = 22 (3b) e (4b) U(11) U (22) V(11) V(22)

5 a k 4 = 22 k 5 = 44 (3b) e (4b) U(22) U (44) V22) V(44)

6 a k 5 = 44 k 6 = 89 (7b) e (8b) U(44) U (89) V(44) V(89)

7 a k 6 = 89 k 7 = 178 (3b) e (4b) U(89) U (178) V(89) V(178)

8 a k 7 = 178 k 8 = 357 (7b) e (8b) U(178) U (357) V(178) V(357)

9 a k 8 = 357 k 9 = 714 (3b) e (4b) U(357) U (714) V(357) V(714)

Si ribadisce ancora una volta che tutti i calcoli per trovare valori di U e di V sono da effettuare in aritmetica modulo p (mod p) Ciograve comporta che tutti i valori numerici dei diversi U(k) e V(k) trovati non saranno mai superiori a p Per il calcolo dellrsquooperazione di elevazione a potenza Q k (mod p) che compare nelle formule si puograve fare ricorso allrsquo algoritmo della esponenziazione modulare Osservando perograve la particolare successione di indici ottenuti si puograve evitare tale tipo di algoritmo che pur efficiente allungherebbe sia il numero di istruzioni nel programma sia anche i tempi do calcolo rispetto ad un algoritmo basato sostanzialmente sulla seguente considerazione si osservi che passando da una iterazione a quella successiva

ikQ risulta essere pari a ( )21minusikQ se lrsquoindice 1minusik egrave un numero pari

ikQ risulta essere pari a ( )21minusikQ middot Q se lrsquoindice 1minusik egrave un numero dispari

Naturalmente i suddetti valori devono essere sempre calcolati (mod p ) Per completezza si riportano qui di seguito partendo dai valori iniziali di U e di V i successivi valori numerici di U e di V trovati in ciascuna iterazione (it) valori iniziali U = 1 V = P = 3 1 a it U(2) = 3 V(2) = 103 2 a it U(5) = 705 V(5) = 1194 3 a it U(11) = 926 V(11) = 581 4 a it U(22) = 27 V(22) = 1218 5 a it U(44) = 65 V(44) = 892 6 a it U(89) = 582 V(89) = 726 7 a it U(178) = 140 V(178) = 597 8 a it U(357) = 0 V(357) = 885 9 a it U(714) = 0 V(714) = 1328

il risultato V(714) = 1328 della 9 a e ultima iterazione egrave il valore cercato V ⎟⎠⎞

⎜⎝⎛ +

21p

= V ⎟⎠⎞

⎜⎝⎛ +

211427

= = = =

= V(714) = 1328 che diviso per 2 da luogo ad una delle soluzioni della congruenza 1z = 2

)714(V =

21328

=

= 664 Lrsquoaltro valore della congruenza egrave immediato 2z = ndash 664 equiv p ndash 1z = 763 Si noti il valore 0 di

2)714(U

Egrave il caso di ricordare ancora una volta che tutti i valori numerici sono calcolati (mod p)

9

Risoluzione della Congruenza z 2 equiv Q (mod p) con valori di Q e p grandi Ersquo necessario a questo punto precisare quanto segue un calcolo per la congruenza relativa ad un modulo p piccolo come quello dellrsquoesempio sopra illustrato (p = 1427) potrebbe essere sviluppato anche piugrave opportunamente con un programma di calcolo con lrsquoalgoritmo di tipo esaustivo composto da poche istruzioni

formanti un ciclo di operazioni ripetuto al massimo 2p

Ciograve egrave vero per moduli p abbastanza piccoli ma si puograve giagrave constatare che nel risolvere una congruenza il cui modulo p sia un primo costituito da solo 8 cifre la differenza dei tempi di calcolo comincia a farsi sentire Ad esempio risolvendo la seguente congruenza z 2 equiv 3 (mod 85225897) su di uno stesso calcolatore e con lrsquoutilizzo di un medesimo linguaggio (Qbasic) si sono ottenuti i seguenti tempi di risoluzione - con algoritmo esaustivo un tempo di 31 secondi - con algoritmo illustrato un tempo praticamente immediato

Il calcolo in questo caso egrave stato effettuato tramite lrsquoesecuzione di un programma realizzato e scritto in linguaggio Qbasic relativo alla risoluzione di una qualsiasi congruenza quadratica avente valori di Q e di p non grandi tali cioegrave di poter risolvere la congruenza in modo esatto con lrsquoutilizzo della sola aritmetica in doppia precisione disponibile sul nel software utilizzato Pertanto nel nostre caso occorre che Q sia composto da non piugrave di 15 cifre e p da non piugrave di 7 cifre Il listato del programma egrave riportato nellrsquo Allegato 1 Per moduli p anche non eccessivamente grandi costituiti da appena 16 cifre si egrave potuto constatare tramite apposito programma a precisione multipla che mentre il tempo impiegato per conoscere se la congruenza egrave risolubile e in tal caso calcolarne le soluzioni egrave praticamente immediato con un programma esaustivo naturalmente estrapolando i tempi ottenuti per moduli p piccoli ( p con 7 cifre e 8 cifre) il tempo di calcolo sarebbe maggiore ai 10 anni Per moduli p con 20 cifre si potrebbe avere addirittura un tempo di verifica e calcolo superiore ai 50 mila anni Che sia importante realizzare un algoritmo e di conseguenza un programma con cui risolvere in tempi brevi le congruenze con valori per Q per p grandi risulta evidente non solo da un punto di vista euristico ma anche quando si deve effettuare la scomposizione in fattori di un numero composto grande Infatti in uno dei piugrave moderni ed efficienti metodi di fattorizzazione di numeri grandi vale a dire il metodo del ldquoCrivello Quadraticordquo (Quadratic Sieve) egrave indispensabile risolvere preliminarmente diverse congruenze quadratiche anche con moduli primi di discrete dimensioni [Kob] [Bre] [SI4 [SI5] [SI6] Inoltre pure nel il campo della crittografia risulta necessario poter risolvere questo tipo di congruenza (vedi piugrave avanti il paragrafo delle applicazioni tecniche) Pertanto si egrave realizzato un ulteriore programma sempre in linguaggio Qbasic dedicato a valori per p e per Q che possono avere valori grandi composti ciascuno anche da diverse decine di cifre In effetti esso egrave atto a risolvere una qualsiasi congruenza quadratica avente termine noto Q sia positivo che negativo costituito sino a qualche centinaia di cifre e con modulo p primo ldquolimitatordquo composto al massimo da 125 cifre Questo limite egrave determinato dallrsquoaver utilizzato nelle istruzioni un solo array bidimensionale (una matrice puograve essere composta al massimo da 8000 elementi nel software Qbasic) per incamerare e memorizzare tutti gli

appositi indici k (da sk = 2

1+p a 0k = 1) trovati con le regole sopraesposte relativi ai valori U(k) e V(k)

In tale programma non essendo sufficienti i calcoli in doppia precisione relativi a tutte le operazioni aritmetiche presenti nel listato del programma mostrato in Allegato 1 le analoghe operazioni aritmetiche vengono effettuate compresa la divisione in aritmetica a precisione multipla Ciograve comporta lrsquoesattezza di tutti i calcoli su numeri grandi e sui risultati ottenuti a scapito perograve di una piugrave onerosa realizzazione del programma dato il grande numero di istruzioni e la loro maggiore complessitagrave necessarie allrsquoesecuzione delle varie operazioni aritmetiche Non si egrave ritenuto opportuno allegare al presente articolo per non appesantirlo troppo il listato del suddetto programma data la sua non indifferente lunghezza In una Tabella sotto riportata sono illustrati comunque alcuni risultati di esempi di risoluzione relativi a congruenze quadratiche ottenuti utilizzando il programma suddetto Nella penultima colonna della tabella egrave mostrato il tempo di calcolo richiesto con lrsquoalgoritmo illustrato Tal nellrsquoultima colonna egrave mostrato invece il tempo di calcolo necessario con lrsquoalgoritmo di tipo esaustivo Tes i valori con sono dedotti ovviamente per estrapolazione dai tempi ottenuti per moduli p di 7 e di 8 cifre Si noti che egrave impensabile intraprendere un calcolo esaustivo per risolvere qualsiasi congruenza quadratica avente per modulo un primo p anche di solo 16 cifre Per una piugrave facile lettura dei valori numerici essi sono stati separati in gruppi di 7 cifre decimali come del resto calcolati nel programma avendo utilizzato per le

10

operazioni aritmetiche la Base (Radix) 710 di numerazione anzicheacute la normale Base 110 Si fa osservare che ad un gruppo di 7 cifre in base 10 si fa corrispondere una singola cifra in aritmetica in Base 710 Considerazioni sulla congruenza z 2 equiv Q (mod n ) con n composto Finora si sono considerate congruenze aventi come moduli numeri primi p Per diversi algoritmi crittografici occorre trovare i valori che soddisfano una congruenza del tipo z 2 equiv Q (mod n ) con n composto dal prodotto di due numeri primi cioegrave n = 21 pp sdot con 1p e 2p numeri primi grandi costituiti ciascuno anche da piugrave di 150 cifre decimali Cosa si puograve dire riguardo ad un tale tipo di congruenza quadratica In generale la risoluzione di una congruenza quadratica con modulo composto presenta le stesse difficoltagrave del problema della fattorizzazione di un numero in quanto il primo passo per la sua eventuale risoluzione egrave quello di scomporre in fattori il modulo n

In questo specifico caso perograve si supponga di conoscere a priori i fattori 1p e 2p che compongono il modulo Si supponga anche che n e Q siano primi tra loro cioegrave che si abbia (Q n) = 1 dove con tale simbologia viene indicato il Massimo Comun Divisore fra Q ed n Condizione indispensabile percheacute la congruenza z 2 equiv Q (mod 21 pp sdot ) sia risolubile egrave che siano risolubili entrambe le due seguenti congruenze z 2 equiv Q (mod 1p ) e z 2 equiv Q (mod 2p ) In effetti se anche una sola delle due congruenze non risulta risolubile anche la congruenza con modulo n = 21 pp sdot non lo egrave [Tch] [Nag] Una volta risolte le due congruenze quadratiche rispettivamente con modulo 1p e modulo 2p ciascuna delle quali presenteragrave due valori numerici che la soddisfano si avranno disponibili 4 congruenze lineari z equiv 11z (mod 1p ) z equiv 12z (mod 1p ) relative alla congruenza con modulo 1p z equiv 21z (mod 2p ) z equiv 22z (mod 2p ) relative alla congruenza con modulo 2p con le quali si possono formare 22 distinti sistemi di congruenze composti ciascuno da 2 congruenze lineariSi tenga presente che in uno qualsiasi di questi 4 sistemi non devono mai comparire due congruenze lineari i cui termini noti siano le soluzioni di una stessa congruenza quadratica Ersquo ben noto che per trovare una soluzione atta a soddisfare un insieme di congruenze lineari bisogna far ricorso al Teorema cinese dei resti Per detto teorema si puograve fare riferimento ad una vasta bibliografia di cui si riportano solo alcuni riferimenti [Bar] [Niv] [Wag] relativi anche ad indirizzi di Siti Internet [SI4][SI5] Questo teorema ci assicura che dato un insieme di congruenze lineari se i vari moduli delle congruenze sono relativamente primi fra loro esiste un valore comune tale da soddisfare simultaneamente ognuna della congruenze Utilizzandolo nel nostro caso avremo che un generico valore dei 4 valori di z 2 equiv Q (mod n ) che la soddisfano puograve essere trovato tramite la seguente formula

nz = iz1 middot 1b middot1p

n + iz2 middot 2b middot

2pn

con i = 12

dove ogni ib si ricava risolvendo la congruenza lineare ip

nmiddot ib equiv 1 ( mod ip )

Alcune applicazioni tecniche Vi sono delle interessanti applicazioni tecniche in cui vengono implicati e utilizzati argomenti trattati nel presente articolo specie nel campo delle telecomunicazioni e della crittografia Ci limiteremo ad elencare qui alcune di quelli indicati in [Shr] e in [Schn] Per i residui quadratici - Applicazione di successioni di residui quadratici nella progettazione riguardante unrsquoampia diffusione di onde sonore negli ambienti per migliorare la qualitagrave acustica - Possibili applicazioni nella copertura radar e sonar nella riduzione del rumore - Applicazione per la riduzione delle interferenze in particolare riguardo al ldquojammingrdquo nelle comunicazioni

11

via radio in cui egrave raccomandato lrsquouso di larghi spettri in effetti nellrsquoutilizzo di una stessa banda di frequenze fra piugrave utenti si puograve dimostrare che lrsquoattribuzione di particolari successioni di residui quadratici da assegnare ad ognuno di loro permette di ridurre al minimo le interferenze fra le varie trasmissioni pur essendo esse contemporanee Per le congruenze quadratiche Oltre al loro giagrave summenzionato utilizzo in uno dei piugrave efficienti metodi di scomposizione in fattori di numeri grandi (Quadratic Sieve Method) altre applicazioni riguardano soprattutto il campo della crittografia abbinata al campo delle telecomunicazioni quali ad esempio ndash il metodo crittografico di Rabin [Schn] vedi riquadro ndash il metodo di Ong ndash Shnorr- Shamir [Schn] relativo alla firma digitale ndash il metodo di zero ndash knowledge di Feige- Fiat - Shamir [Schn] dedicato allrsquorsquoautenticazione della firma

digitale Per le Sequenze di Lucas vi sono applicazioni che interessano sia crittosistemi a chiave pubblica come ad esempio il ldquoLUC Public Key Encriptionrdquo) valido quanto il crittosistema RSA sia test di primalitagrave Riguardo a questrsquoultimo argomento egrave da mettere in evidenza infatti che la ricerca e lrsquoindividuazione dei piugrave grandi numeri primi finora scoperti si egrave potuta realizzare grazie proprio allrsquoimpiego di dette sequenze METODO di RABIN

Il messaggio M viene crittografato secondo la relazione C equiv 2M ( mod N ) dove N egrave un numero composto dal prodotto di due grandi primi 1p e 2p ciascuno costituito da parecchie decine di cifre in ricezione lrsquoutente la cui chiave pubblica egrave il numero N

quando riceve il messaggio criptato C egrave lrsquounico a poterlo decifrare utilizzando le sue due chiavi segrete 1p e 2p Esso perograve deve

disporre di un algoritmo veloce ed efficace per decrittare il messaggio secondo la relazione 2z equiv C ( mod N ) la cui risoluzione

puograve essere effettuata solo risolvendo prima le due congruenze 2z equiv C (mod 1p ) e 2z equiv C (mod 2p ) quindi col ricorso del Teorema dei Resti Cinese risolvendo il sistema di due congruenze lineari impieganti le soluzioni delle suddette congruenze Si

dimostra infatti che uno dei quattro valori di z trovati che soddisfano la congruenza 2z equiv C ( mod N ) risulta essere il messaggio originale M Ersquo da osservare perograve che sussiste lrsquoambiguitagrave della scelta del messaggio effettivo fra i quattro valori di z Se il messaggio originale egrave un normale testo in italiano (o comunque in unrsquoaltra lingua) allora saragrave facile scegliere fra i quattro valori di z quello corretto In generale sussiste la suddetta ambiguitagrave ----------------------------------------------------------------------------- Un possibile metodo comunque non molto efficiente per ovviare a ciograve potrebbe essere il seguente lrsquoutente a cui egrave destinato il messaggio mette a disposizione due chiavi pubbliche 1N = 1p middot 2p e 2N = 3p middot 4p avendo come sue chiavi segrete i quattro

numeri primi 1p 2p 3p e 4p Esso riceveragrave pertanto due messaggi criptati 1C equiv 2M (mod 1N ) e 2C equiv 2M (mod

2N ) che decritteragrave risolvendo le due congruenze quadratiche 2z equiv 1C (mod 1N ) e 2z equiv 2C (mod 2N ) Si avranno cosigrave disponibili quattro valori risolutivi per la prima congruenza ed altri quattro per la seconda Osservando queste otto soluzioni solo due in generale saranno identiche una estratta fra le quattro della prima congruenza lrsquoaltra estratta dalle altre quattro relative alla seconda congruenza Saragrave pertanto questa soluzione comune il messaggio originale M Nota sui residui Occorre tener conto che sui residui ottenuti si possono effettuare se necessarie le seguenti operazioni lecite in aritmetica modulare 1 ) se rn lt 0 egrave il residuo negativo (mod p ) di un valore numerico negativo ndashR i molti casi risulta preferibile sostituire questo valore negativo rn con lrsquoequivalente (piugrave prossimo a 0) residuo rp positivo ( mod p) di ndashR che risulta essere rp = p - |rn| Tale sostituzione risulta indispensabile allorcheacute si devono effettuare i calcoli in aritmetica a precisione multipla su grandi valori numerici non sono trattabili neanche con lrsquoaritmetica la doppia precisione disponibile sul calcolatore nel linguaggio utilizzato 2) detto rd il residuo dispari di R ( mod p) per ottenere un intero quale residuo di rd 2 si calcola il

valore 2

prd + che saragrave senzrsquoaltro intero essendo pgt2 dispari

Questa operazione deve essere effettuata ad esempio quando nelle formule (7) e (8) utilizzate per il calcolo del residuo di 2middotU(2k+1) e di 2middotV(2k+1) il risultato dei calcoli (mod p) egrave un numero dispari dovendo trovare invece il residuo di U(2k+1) o di V(2k+1)

12

RIFERIMENTI [Bar] - GC Barozzi Aritmetica un approccio computazionale Zanichelli Bologna 1991 [Bre] - DMBressoud Factorization and Primality Testing Springer-Verlag New York 1989 [Cip] - MCipolla Teoria dei numeri Analisi Indeterminata in Enciclopedia delle Matematiche Elementari volI parte I Cap IV ndash Parte seconda - U Hoepli editore Milano [Dic] - L E Dickson ndash History of the Theory of Numbers Vol I ChapVII - Chelsea Publishing Company New York 1992 [Eul] - L Euler Eleacutemens drsquoAlgegravebre ndashTome second Analise Indetermineacutee Bachelier Librairie pour le Matheacutematiques Paris 1807 [Hur] - A Hurwitz ndash N Kritikos Lectures on Number Theory Springer-Verlag New York 1986 [Kob] - N Kobliz A Course in Number Theory and Criptography Springer-Verlag New York 1994 [Kra] - EKranakis Primality and Cryptography JWiley amp Sons 1986 [Lan] - E Landau Elementary Number Theory Chelsea Publishing Company New York 1966 Nag] - T Nagell Introduction to Number Theory Chelsea Publishing Company New York 1981 [Niv] - I Niven - HSZuckerman An Introduction to the Theory of Numbers JWiley amp Sons 1980 [Old] - CD Olds Frazioni continue Collana di Matematica Moderna ndash vol MM5 Zanichelli Bologna 1970 [Pom] - C Pomerance Alla ricerca dei numeri primi Le Scienze - quaderni n14 marzo 1984 [Rib] - P Ribenboim The Book of Prime Number Records Springer-Verlag New York 1989 [Rie] H Riesel Prime Number and Computer Methods for Factorization Birkhaumluser Boston 1985 [Rob] - G Robin Algorithmique et cryptographie Mathematiques amp Applications vol ndeg 8 (1991) Ellipses ndash Edition Marketing [Sch] - MR Schroeder La Teoria dei Numeri franco muzio amp ceditore Padova 1986 [Schn] - B Schneider Applied Cryptography John Wiley amp SInc New York [Tch] - P L Tchebichef Teoria delle Congruenze E Loescher amp Cdeg Roma 1895 [Te1] - C Teodoro La Generazione della chiave privata nellrsquoalgoritmo crittografico RSA a chiave pubblica in ldquomatematicamenteit ndash sezione Applicazioni Ingegneriardquo [Te2] - C Teodoro Un metodo per il calcolo veloce dei numeri di Fibonacci e di Lucas La Comunicazione anno 2001 Vol XLX [Wag] - SWagon Guida a Matematica ( capitoli 8 e 9) McGraw ndashHill Libri Italia srl Milano 1995 Siti Internet [SI0] - httpaieecsumichedupeopleroundsWinter02SlidesLectureApril4pdf [SI1] - http164813169Enciklopedijamathmathjj026htm [SI2] - httpwwwmathswtedu~hazprob_setsnotesnode34html [SI3] - httpmathworldwolframcomLucasSequencehtml [SI4] - httpmathworldwolframcomQuadraticSievehtml [SI5] - httpwwwmathksuedumath511notesiqs2000htm [SI6] - httpnethzchstudentralbrunnTQShtml [SI7] - httpmathworldwolframcomChinese Remainder Theoremhtml [SI8] - httpwwwmathswtedu~hazprob_setsnotesnode25html

Vengono riportati nelle pagine seguenti

- alcuni esempi di calcolo per congruenze con valori di q e di p non grandi ottenuti utilizzando il programma riportato in ALLEGATO 1

- una Tabella riguardante diversi risultati di risoluzione di congruenze quadratiche presentanti valori di Q e di p grandi e quindi risolte con lrsquoimpiego di apposito programma utilizzante una aritmetica a precisione multipla - altri esempi di calcolo per congruenze presentanti anche valori di Q e di p grandi risolte utilizzando un apposito programma con aritmetica a precisione multipla

13

ESEMPI di risoluzione della congruenza )(mod2 pQz equiv con lrsquoutilizzo del programma in Allegato 1

ESEMPIO n1 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q876543 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p113 k5 = 57 k4 = 28 k3 = 14 k2 = 7 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 5 1 ^it U( 3 ) = 23 V( 3 ) = 95 2 ^it U( 7 ) = 23 V( 7 ) = 76 3 ^it U( 14 ) = 53 V( 14 ) = 96 4 ^it U( 28 ) = 3 V( 28 ) = 65 5 ^it U( 57 ) = 0 V( 57 ) = 11 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 876543 (mod 113 )SONO z1 = 62 z2 = 51 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-7723 che (z2^2 - Q) p =-7734 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

14

ESEMPIO n2 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -47 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 1427 k9 = 714 k8 = 357 k7 = 178 k6 = 89 k5 = 44 k4 = 22 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 103 2 ^it U( 5 ) = 705 V( 5 ) = 1194 3 ^it U( 11 ) = 926 V( 11 ) = 581 4 ^it U( 22 ) = 27 V( 22 ) = 1218 5 ^it U( 44 ) = 65 V( 44 ) = 892 6 ^it U( 89 ) = 582 V( 89 ) = 726 7 ^it U( 178 ) = 140 V( 178 ) = 597 8 ^it U( 357 ) = 0 V( 357 ) = 885 9 ^it U( 714 ) = 0 V( 714 ) = 1328 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-47 (mod 1427 ) SONO z1 = 664 z2 = 763 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 309 che (z2^2 - Q) p = 408 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

8

Sempre per lrsquoesempio riportato si puograve costituire cosigrave la seguente tabella esplicativa

iterazione Passaggio indici Formule U (k 1minusi ) U (k i ) V(k 1minusi ) V (k i )

d a k 1minusi a k i da usare

1 a k 0 = 1 k 1 = 2 (3b) e (4b) U(1) U(2) V(1) V(2)

2 a k 1 = 2 k 2 = 5 (7b) e (8b) U(2) U(5) V (2) V(5)

3 a k 2 = 5 k 3 = 11 (7b) e (8b) U(5) U(11) V (5) V(11)

4 a k 3 = 11 k 4 = 22 (3b) e (4b) U(11) U (22) V(11) V(22)

5 a k 4 = 22 k 5 = 44 (3b) e (4b) U(22) U (44) V22) V(44)

6 a k 5 = 44 k 6 = 89 (7b) e (8b) U(44) U (89) V(44) V(89)

7 a k 6 = 89 k 7 = 178 (3b) e (4b) U(89) U (178) V(89) V(178)

8 a k 7 = 178 k 8 = 357 (7b) e (8b) U(178) U (357) V(178) V(357)

9 a k 8 = 357 k 9 = 714 (3b) e (4b) U(357) U (714) V(357) V(714)

Si ribadisce ancora una volta che tutti i calcoli per trovare valori di U e di V sono da effettuare in aritmetica modulo p (mod p) Ciograve comporta che tutti i valori numerici dei diversi U(k) e V(k) trovati non saranno mai superiori a p Per il calcolo dellrsquooperazione di elevazione a potenza Q k (mod p) che compare nelle formule si puograve fare ricorso allrsquo algoritmo della esponenziazione modulare Osservando perograve la particolare successione di indici ottenuti si puograve evitare tale tipo di algoritmo che pur efficiente allungherebbe sia il numero di istruzioni nel programma sia anche i tempi do calcolo rispetto ad un algoritmo basato sostanzialmente sulla seguente considerazione si osservi che passando da una iterazione a quella successiva

ikQ risulta essere pari a ( )21minusikQ se lrsquoindice 1minusik egrave un numero pari

ikQ risulta essere pari a ( )21minusikQ middot Q se lrsquoindice 1minusik egrave un numero dispari

Naturalmente i suddetti valori devono essere sempre calcolati (mod p ) Per completezza si riportano qui di seguito partendo dai valori iniziali di U e di V i successivi valori numerici di U e di V trovati in ciascuna iterazione (it) valori iniziali U = 1 V = P = 3 1 a it U(2) = 3 V(2) = 103 2 a it U(5) = 705 V(5) = 1194 3 a it U(11) = 926 V(11) = 581 4 a it U(22) = 27 V(22) = 1218 5 a it U(44) = 65 V(44) = 892 6 a it U(89) = 582 V(89) = 726 7 a it U(178) = 140 V(178) = 597 8 a it U(357) = 0 V(357) = 885 9 a it U(714) = 0 V(714) = 1328

il risultato V(714) = 1328 della 9 a e ultima iterazione egrave il valore cercato V ⎟⎠⎞

⎜⎝⎛ +

21p

= V ⎟⎠⎞

⎜⎝⎛ +

211427

= = = =

= V(714) = 1328 che diviso per 2 da luogo ad una delle soluzioni della congruenza 1z = 2

)714(V =

21328

=

= 664 Lrsquoaltro valore della congruenza egrave immediato 2z = ndash 664 equiv p ndash 1z = 763 Si noti il valore 0 di

2)714(U

Egrave il caso di ricordare ancora una volta che tutti i valori numerici sono calcolati (mod p)

9

Risoluzione della Congruenza z 2 equiv Q (mod p) con valori di Q e p grandi Ersquo necessario a questo punto precisare quanto segue un calcolo per la congruenza relativa ad un modulo p piccolo come quello dellrsquoesempio sopra illustrato (p = 1427) potrebbe essere sviluppato anche piugrave opportunamente con un programma di calcolo con lrsquoalgoritmo di tipo esaustivo composto da poche istruzioni

formanti un ciclo di operazioni ripetuto al massimo 2p

Ciograve egrave vero per moduli p abbastanza piccoli ma si puograve giagrave constatare che nel risolvere una congruenza il cui modulo p sia un primo costituito da solo 8 cifre la differenza dei tempi di calcolo comincia a farsi sentire Ad esempio risolvendo la seguente congruenza z 2 equiv 3 (mod 85225897) su di uno stesso calcolatore e con lrsquoutilizzo di un medesimo linguaggio (Qbasic) si sono ottenuti i seguenti tempi di risoluzione - con algoritmo esaustivo un tempo di 31 secondi - con algoritmo illustrato un tempo praticamente immediato

Il calcolo in questo caso egrave stato effettuato tramite lrsquoesecuzione di un programma realizzato e scritto in linguaggio Qbasic relativo alla risoluzione di una qualsiasi congruenza quadratica avente valori di Q e di p non grandi tali cioegrave di poter risolvere la congruenza in modo esatto con lrsquoutilizzo della sola aritmetica in doppia precisione disponibile sul nel software utilizzato Pertanto nel nostre caso occorre che Q sia composto da non piugrave di 15 cifre e p da non piugrave di 7 cifre Il listato del programma egrave riportato nellrsquo Allegato 1 Per moduli p anche non eccessivamente grandi costituiti da appena 16 cifre si egrave potuto constatare tramite apposito programma a precisione multipla che mentre il tempo impiegato per conoscere se la congruenza egrave risolubile e in tal caso calcolarne le soluzioni egrave praticamente immediato con un programma esaustivo naturalmente estrapolando i tempi ottenuti per moduli p piccoli ( p con 7 cifre e 8 cifre) il tempo di calcolo sarebbe maggiore ai 10 anni Per moduli p con 20 cifre si potrebbe avere addirittura un tempo di verifica e calcolo superiore ai 50 mila anni Che sia importante realizzare un algoritmo e di conseguenza un programma con cui risolvere in tempi brevi le congruenze con valori per Q per p grandi risulta evidente non solo da un punto di vista euristico ma anche quando si deve effettuare la scomposizione in fattori di un numero composto grande Infatti in uno dei piugrave moderni ed efficienti metodi di fattorizzazione di numeri grandi vale a dire il metodo del ldquoCrivello Quadraticordquo (Quadratic Sieve) egrave indispensabile risolvere preliminarmente diverse congruenze quadratiche anche con moduli primi di discrete dimensioni [Kob] [Bre] [SI4 [SI5] [SI6] Inoltre pure nel il campo della crittografia risulta necessario poter risolvere questo tipo di congruenza (vedi piugrave avanti il paragrafo delle applicazioni tecniche) Pertanto si egrave realizzato un ulteriore programma sempre in linguaggio Qbasic dedicato a valori per p e per Q che possono avere valori grandi composti ciascuno anche da diverse decine di cifre In effetti esso egrave atto a risolvere una qualsiasi congruenza quadratica avente termine noto Q sia positivo che negativo costituito sino a qualche centinaia di cifre e con modulo p primo ldquolimitatordquo composto al massimo da 125 cifre Questo limite egrave determinato dallrsquoaver utilizzato nelle istruzioni un solo array bidimensionale (una matrice puograve essere composta al massimo da 8000 elementi nel software Qbasic) per incamerare e memorizzare tutti gli

appositi indici k (da sk = 2

1+p a 0k = 1) trovati con le regole sopraesposte relativi ai valori U(k) e V(k)

In tale programma non essendo sufficienti i calcoli in doppia precisione relativi a tutte le operazioni aritmetiche presenti nel listato del programma mostrato in Allegato 1 le analoghe operazioni aritmetiche vengono effettuate compresa la divisione in aritmetica a precisione multipla Ciograve comporta lrsquoesattezza di tutti i calcoli su numeri grandi e sui risultati ottenuti a scapito perograve di una piugrave onerosa realizzazione del programma dato il grande numero di istruzioni e la loro maggiore complessitagrave necessarie allrsquoesecuzione delle varie operazioni aritmetiche Non si egrave ritenuto opportuno allegare al presente articolo per non appesantirlo troppo il listato del suddetto programma data la sua non indifferente lunghezza In una Tabella sotto riportata sono illustrati comunque alcuni risultati di esempi di risoluzione relativi a congruenze quadratiche ottenuti utilizzando il programma suddetto Nella penultima colonna della tabella egrave mostrato il tempo di calcolo richiesto con lrsquoalgoritmo illustrato Tal nellrsquoultima colonna egrave mostrato invece il tempo di calcolo necessario con lrsquoalgoritmo di tipo esaustivo Tes i valori con sono dedotti ovviamente per estrapolazione dai tempi ottenuti per moduli p di 7 e di 8 cifre Si noti che egrave impensabile intraprendere un calcolo esaustivo per risolvere qualsiasi congruenza quadratica avente per modulo un primo p anche di solo 16 cifre Per una piugrave facile lettura dei valori numerici essi sono stati separati in gruppi di 7 cifre decimali come del resto calcolati nel programma avendo utilizzato per le

10

operazioni aritmetiche la Base (Radix) 710 di numerazione anzicheacute la normale Base 110 Si fa osservare che ad un gruppo di 7 cifre in base 10 si fa corrispondere una singola cifra in aritmetica in Base 710 Considerazioni sulla congruenza z 2 equiv Q (mod n ) con n composto Finora si sono considerate congruenze aventi come moduli numeri primi p Per diversi algoritmi crittografici occorre trovare i valori che soddisfano una congruenza del tipo z 2 equiv Q (mod n ) con n composto dal prodotto di due numeri primi cioegrave n = 21 pp sdot con 1p e 2p numeri primi grandi costituiti ciascuno anche da piugrave di 150 cifre decimali Cosa si puograve dire riguardo ad un tale tipo di congruenza quadratica In generale la risoluzione di una congruenza quadratica con modulo composto presenta le stesse difficoltagrave del problema della fattorizzazione di un numero in quanto il primo passo per la sua eventuale risoluzione egrave quello di scomporre in fattori il modulo n

In questo specifico caso perograve si supponga di conoscere a priori i fattori 1p e 2p che compongono il modulo Si supponga anche che n e Q siano primi tra loro cioegrave che si abbia (Q n) = 1 dove con tale simbologia viene indicato il Massimo Comun Divisore fra Q ed n Condizione indispensabile percheacute la congruenza z 2 equiv Q (mod 21 pp sdot ) sia risolubile egrave che siano risolubili entrambe le due seguenti congruenze z 2 equiv Q (mod 1p ) e z 2 equiv Q (mod 2p ) In effetti se anche una sola delle due congruenze non risulta risolubile anche la congruenza con modulo n = 21 pp sdot non lo egrave [Tch] [Nag] Una volta risolte le due congruenze quadratiche rispettivamente con modulo 1p e modulo 2p ciascuna delle quali presenteragrave due valori numerici che la soddisfano si avranno disponibili 4 congruenze lineari z equiv 11z (mod 1p ) z equiv 12z (mod 1p ) relative alla congruenza con modulo 1p z equiv 21z (mod 2p ) z equiv 22z (mod 2p ) relative alla congruenza con modulo 2p con le quali si possono formare 22 distinti sistemi di congruenze composti ciascuno da 2 congruenze lineariSi tenga presente che in uno qualsiasi di questi 4 sistemi non devono mai comparire due congruenze lineari i cui termini noti siano le soluzioni di una stessa congruenza quadratica Ersquo ben noto che per trovare una soluzione atta a soddisfare un insieme di congruenze lineari bisogna far ricorso al Teorema cinese dei resti Per detto teorema si puograve fare riferimento ad una vasta bibliografia di cui si riportano solo alcuni riferimenti [Bar] [Niv] [Wag] relativi anche ad indirizzi di Siti Internet [SI4][SI5] Questo teorema ci assicura che dato un insieme di congruenze lineari se i vari moduli delle congruenze sono relativamente primi fra loro esiste un valore comune tale da soddisfare simultaneamente ognuna della congruenze Utilizzandolo nel nostro caso avremo che un generico valore dei 4 valori di z 2 equiv Q (mod n ) che la soddisfano puograve essere trovato tramite la seguente formula

nz = iz1 middot 1b middot1p

n + iz2 middot 2b middot

2pn

con i = 12

dove ogni ib si ricava risolvendo la congruenza lineare ip

nmiddot ib equiv 1 ( mod ip )

Alcune applicazioni tecniche Vi sono delle interessanti applicazioni tecniche in cui vengono implicati e utilizzati argomenti trattati nel presente articolo specie nel campo delle telecomunicazioni e della crittografia Ci limiteremo ad elencare qui alcune di quelli indicati in [Shr] e in [Schn] Per i residui quadratici - Applicazione di successioni di residui quadratici nella progettazione riguardante unrsquoampia diffusione di onde sonore negli ambienti per migliorare la qualitagrave acustica - Possibili applicazioni nella copertura radar e sonar nella riduzione del rumore - Applicazione per la riduzione delle interferenze in particolare riguardo al ldquojammingrdquo nelle comunicazioni

11

via radio in cui egrave raccomandato lrsquouso di larghi spettri in effetti nellrsquoutilizzo di una stessa banda di frequenze fra piugrave utenti si puograve dimostrare che lrsquoattribuzione di particolari successioni di residui quadratici da assegnare ad ognuno di loro permette di ridurre al minimo le interferenze fra le varie trasmissioni pur essendo esse contemporanee Per le congruenze quadratiche Oltre al loro giagrave summenzionato utilizzo in uno dei piugrave efficienti metodi di scomposizione in fattori di numeri grandi (Quadratic Sieve Method) altre applicazioni riguardano soprattutto il campo della crittografia abbinata al campo delle telecomunicazioni quali ad esempio ndash il metodo crittografico di Rabin [Schn] vedi riquadro ndash il metodo di Ong ndash Shnorr- Shamir [Schn] relativo alla firma digitale ndash il metodo di zero ndash knowledge di Feige- Fiat - Shamir [Schn] dedicato allrsquorsquoautenticazione della firma

digitale Per le Sequenze di Lucas vi sono applicazioni che interessano sia crittosistemi a chiave pubblica come ad esempio il ldquoLUC Public Key Encriptionrdquo) valido quanto il crittosistema RSA sia test di primalitagrave Riguardo a questrsquoultimo argomento egrave da mettere in evidenza infatti che la ricerca e lrsquoindividuazione dei piugrave grandi numeri primi finora scoperti si egrave potuta realizzare grazie proprio allrsquoimpiego di dette sequenze METODO di RABIN

Il messaggio M viene crittografato secondo la relazione C equiv 2M ( mod N ) dove N egrave un numero composto dal prodotto di due grandi primi 1p e 2p ciascuno costituito da parecchie decine di cifre in ricezione lrsquoutente la cui chiave pubblica egrave il numero N

quando riceve il messaggio criptato C egrave lrsquounico a poterlo decifrare utilizzando le sue due chiavi segrete 1p e 2p Esso perograve deve

disporre di un algoritmo veloce ed efficace per decrittare il messaggio secondo la relazione 2z equiv C ( mod N ) la cui risoluzione

puograve essere effettuata solo risolvendo prima le due congruenze 2z equiv C (mod 1p ) e 2z equiv C (mod 2p ) quindi col ricorso del Teorema dei Resti Cinese risolvendo il sistema di due congruenze lineari impieganti le soluzioni delle suddette congruenze Si

dimostra infatti che uno dei quattro valori di z trovati che soddisfano la congruenza 2z equiv C ( mod N ) risulta essere il messaggio originale M Ersquo da osservare perograve che sussiste lrsquoambiguitagrave della scelta del messaggio effettivo fra i quattro valori di z Se il messaggio originale egrave un normale testo in italiano (o comunque in unrsquoaltra lingua) allora saragrave facile scegliere fra i quattro valori di z quello corretto In generale sussiste la suddetta ambiguitagrave ----------------------------------------------------------------------------- Un possibile metodo comunque non molto efficiente per ovviare a ciograve potrebbe essere il seguente lrsquoutente a cui egrave destinato il messaggio mette a disposizione due chiavi pubbliche 1N = 1p middot 2p e 2N = 3p middot 4p avendo come sue chiavi segrete i quattro

numeri primi 1p 2p 3p e 4p Esso riceveragrave pertanto due messaggi criptati 1C equiv 2M (mod 1N ) e 2C equiv 2M (mod

2N ) che decritteragrave risolvendo le due congruenze quadratiche 2z equiv 1C (mod 1N ) e 2z equiv 2C (mod 2N ) Si avranno cosigrave disponibili quattro valori risolutivi per la prima congruenza ed altri quattro per la seconda Osservando queste otto soluzioni solo due in generale saranno identiche una estratta fra le quattro della prima congruenza lrsquoaltra estratta dalle altre quattro relative alla seconda congruenza Saragrave pertanto questa soluzione comune il messaggio originale M Nota sui residui Occorre tener conto che sui residui ottenuti si possono effettuare se necessarie le seguenti operazioni lecite in aritmetica modulare 1 ) se rn lt 0 egrave il residuo negativo (mod p ) di un valore numerico negativo ndashR i molti casi risulta preferibile sostituire questo valore negativo rn con lrsquoequivalente (piugrave prossimo a 0) residuo rp positivo ( mod p) di ndashR che risulta essere rp = p - |rn| Tale sostituzione risulta indispensabile allorcheacute si devono effettuare i calcoli in aritmetica a precisione multipla su grandi valori numerici non sono trattabili neanche con lrsquoaritmetica la doppia precisione disponibile sul calcolatore nel linguaggio utilizzato 2) detto rd il residuo dispari di R ( mod p) per ottenere un intero quale residuo di rd 2 si calcola il

valore 2

prd + che saragrave senzrsquoaltro intero essendo pgt2 dispari

Questa operazione deve essere effettuata ad esempio quando nelle formule (7) e (8) utilizzate per il calcolo del residuo di 2middotU(2k+1) e di 2middotV(2k+1) il risultato dei calcoli (mod p) egrave un numero dispari dovendo trovare invece il residuo di U(2k+1) o di V(2k+1)

12

RIFERIMENTI [Bar] - GC Barozzi Aritmetica un approccio computazionale Zanichelli Bologna 1991 [Bre] - DMBressoud Factorization and Primality Testing Springer-Verlag New York 1989 [Cip] - MCipolla Teoria dei numeri Analisi Indeterminata in Enciclopedia delle Matematiche Elementari volI parte I Cap IV ndash Parte seconda - U Hoepli editore Milano [Dic] - L E Dickson ndash History of the Theory of Numbers Vol I ChapVII - Chelsea Publishing Company New York 1992 [Eul] - L Euler Eleacutemens drsquoAlgegravebre ndashTome second Analise Indetermineacutee Bachelier Librairie pour le Matheacutematiques Paris 1807 [Hur] - A Hurwitz ndash N Kritikos Lectures on Number Theory Springer-Verlag New York 1986 [Kob] - N Kobliz A Course in Number Theory and Criptography Springer-Verlag New York 1994 [Kra] - EKranakis Primality and Cryptography JWiley amp Sons 1986 [Lan] - E Landau Elementary Number Theory Chelsea Publishing Company New York 1966 Nag] - T Nagell Introduction to Number Theory Chelsea Publishing Company New York 1981 [Niv] - I Niven - HSZuckerman An Introduction to the Theory of Numbers JWiley amp Sons 1980 [Old] - CD Olds Frazioni continue Collana di Matematica Moderna ndash vol MM5 Zanichelli Bologna 1970 [Pom] - C Pomerance Alla ricerca dei numeri primi Le Scienze - quaderni n14 marzo 1984 [Rib] - P Ribenboim The Book of Prime Number Records Springer-Verlag New York 1989 [Rie] H Riesel Prime Number and Computer Methods for Factorization Birkhaumluser Boston 1985 [Rob] - G Robin Algorithmique et cryptographie Mathematiques amp Applications vol ndeg 8 (1991) Ellipses ndash Edition Marketing [Sch] - MR Schroeder La Teoria dei Numeri franco muzio amp ceditore Padova 1986 [Schn] - B Schneider Applied Cryptography John Wiley amp SInc New York [Tch] - P L Tchebichef Teoria delle Congruenze E Loescher amp Cdeg Roma 1895 [Te1] - C Teodoro La Generazione della chiave privata nellrsquoalgoritmo crittografico RSA a chiave pubblica in ldquomatematicamenteit ndash sezione Applicazioni Ingegneriardquo [Te2] - C Teodoro Un metodo per il calcolo veloce dei numeri di Fibonacci e di Lucas La Comunicazione anno 2001 Vol XLX [Wag] - SWagon Guida a Matematica ( capitoli 8 e 9) McGraw ndashHill Libri Italia srl Milano 1995 Siti Internet [SI0] - httpaieecsumichedupeopleroundsWinter02SlidesLectureApril4pdf [SI1] - http164813169Enciklopedijamathmathjj026htm [SI2] - httpwwwmathswtedu~hazprob_setsnotesnode34html [SI3] - httpmathworldwolframcomLucasSequencehtml [SI4] - httpmathworldwolframcomQuadraticSievehtml [SI5] - httpwwwmathksuedumath511notesiqs2000htm [SI6] - httpnethzchstudentralbrunnTQShtml [SI7] - httpmathworldwolframcomChinese Remainder Theoremhtml [SI8] - httpwwwmathswtedu~hazprob_setsnotesnode25html

Vengono riportati nelle pagine seguenti

- alcuni esempi di calcolo per congruenze con valori di q e di p non grandi ottenuti utilizzando il programma riportato in ALLEGATO 1

- una Tabella riguardante diversi risultati di risoluzione di congruenze quadratiche presentanti valori di Q e di p grandi e quindi risolte con lrsquoimpiego di apposito programma utilizzante una aritmetica a precisione multipla - altri esempi di calcolo per congruenze presentanti anche valori di Q e di p grandi risolte utilizzando un apposito programma con aritmetica a precisione multipla

13

ESEMPI di risoluzione della congruenza )(mod2 pQz equiv con lrsquoutilizzo del programma in Allegato 1

ESEMPIO n1 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q876543 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p113 k5 = 57 k4 = 28 k3 = 14 k2 = 7 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 5 1 ^it U( 3 ) = 23 V( 3 ) = 95 2 ^it U( 7 ) = 23 V( 7 ) = 76 3 ^it U( 14 ) = 53 V( 14 ) = 96 4 ^it U( 28 ) = 3 V( 28 ) = 65 5 ^it U( 57 ) = 0 V( 57 ) = 11 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 876543 (mod 113 )SONO z1 = 62 z2 = 51 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-7723 che (z2^2 - Q) p =-7734 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

14

ESEMPIO n2 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -47 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 1427 k9 = 714 k8 = 357 k7 = 178 k6 = 89 k5 = 44 k4 = 22 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 103 2 ^it U( 5 ) = 705 V( 5 ) = 1194 3 ^it U( 11 ) = 926 V( 11 ) = 581 4 ^it U( 22 ) = 27 V( 22 ) = 1218 5 ^it U( 44 ) = 65 V( 44 ) = 892 6 ^it U( 89 ) = 582 V( 89 ) = 726 7 ^it U( 178 ) = 140 V( 178 ) = 597 8 ^it U( 357 ) = 0 V( 357 ) = 885 9 ^it U( 714 ) = 0 V( 714 ) = 1328 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-47 (mod 1427 ) SONO z1 = 664 z2 = 763 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 309 che (z2^2 - Q) p = 408 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

9

Risoluzione della Congruenza z 2 equiv Q (mod p) con valori di Q e p grandi Ersquo necessario a questo punto precisare quanto segue un calcolo per la congruenza relativa ad un modulo p piccolo come quello dellrsquoesempio sopra illustrato (p = 1427) potrebbe essere sviluppato anche piugrave opportunamente con un programma di calcolo con lrsquoalgoritmo di tipo esaustivo composto da poche istruzioni

formanti un ciclo di operazioni ripetuto al massimo 2p

Ciograve egrave vero per moduli p abbastanza piccoli ma si puograve giagrave constatare che nel risolvere una congruenza il cui modulo p sia un primo costituito da solo 8 cifre la differenza dei tempi di calcolo comincia a farsi sentire Ad esempio risolvendo la seguente congruenza z 2 equiv 3 (mod 85225897) su di uno stesso calcolatore e con lrsquoutilizzo di un medesimo linguaggio (Qbasic) si sono ottenuti i seguenti tempi di risoluzione - con algoritmo esaustivo un tempo di 31 secondi - con algoritmo illustrato un tempo praticamente immediato

Il calcolo in questo caso egrave stato effettuato tramite lrsquoesecuzione di un programma realizzato e scritto in linguaggio Qbasic relativo alla risoluzione di una qualsiasi congruenza quadratica avente valori di Q e di p non grandi tali cioegrave di poter risolvere la congruenza in modo esatto con lrsquoutilizzo della sola aritmetica in doppia precisione disponibile sul nel software utilizzato Pertanto nel nostre caso occorre che Q sia composto da non piugrave di 15 cifre e p da non piugrave di 7 cifre Il listato del programma egrave riportato nellrsquo Allegato 1 Per moduli p anche non eccessivamente grandi costituiti da appena 16 cifre si egrave potuto constatare tramite apposito programma a precisione multipla che mentre il tempo impiegato per conoscere se la congruenza egrave risolubile e in tal caso calcolarne le soluzioni egrave praticamente immediato con un programma esaustivo naturalmente estrapolando i tempi ottenuti per moduli p piccoli ( p con 7 cifre e 8 cifre) il tempo di calcolo sarebbe maggiore ai 10 anni Per moduli p con 20 cifre si potrebbe avere addirittura un tempo di verifica e calcolo superiore ai 50 mila anni Che sia importante realizzare un algoritmo e di conseguenza un programma con cui risolvere in tempi brevi le congruenze con valori per Q per p grandi risulta evidente non solo da un punto di vista euristico ma anche quando si deve effettuare la scomposizione in fattori di un numero composto grande Infatti in uno dei piugrave moderni ed efficienti metodi di fattorizzazione di numeri grandi vale a dire il metodo del ldquoCrivello Quadraticordquo (Quadratic Sieve) egrave indispensabile risolvere preliminarmente diverse congruenze quadratiche anche con moduli primi di discrete dimensioni [Kob] [Bre] [SI4 [SI5] [SI6] Inoltre pure nel il campo della crittografia risulta necessario poter risolvere questo tipo di congruenza (vedi piugrave avanti il paragrafo delle applicazioni tecniche) Pertanto si egrave realizzato un ulteriore programma sempre in linguaggio Qbasic dedicato a valori per p e per Q che possono avere valori grandi composti ciascuno anche da diverse decine di cifre In effetti esso egrave atto a risolvere una qualsiasi congruenza quadratica avente termine noto Q sia positivo che negativo costituito sino a qualche centinaia di cifre e con modulo p primo ldquolimitatordquo composto al massimo da 125 cifre Questo limite egrave determinato dallrsquoaver utilizzato nelle istruzioni un solo array bidimensionale (una matrice puograve essere composta al massimo da 8000 elementi nel software Qbasic) per incamerare e memorizzare tutti gli

appositi indici k (da sk = 2

1+p a 0k = 1) trovati con le regole sopraesposte relativi ai valori U(k) e V(k)

In tale programma non essendo sufficienti i calcoli in doppia precisione relativi a tutte le operazioni aritmetiche presenti nel listato del programma mostrato in Allegato 1 le analoghe operazioni aritmetiche vengono effettuate compresa la divisione in aritmetica a precisione multipla Ciograve comporta lrsquoesattezza di tutti i calcoli su numeri grandi e sui risultati ottenuti a scapito perograve di una piugrave onerosa realizzazione del programma dato il grande numero di istruzioni e la loro maggiore complessitagrave necessarie allrsquoesecuzione delle varie operazioni aritmetiche Non si egrave ritenuto opportuno allegare al presente articolo per non appesantirlo troppo il listato del suddetto programma data la sua non indifferente lunghezza In una Tabella sotto riportata sono illustrati comunque alcuni risultati di esempi di risoluzione relativi a congruenze quadratiche ottenuti utilizzando il programma suddetto Nella penultima colonna della tabella egrave mostrato il tempo di calcolo richiesto con lrsquoalgoritmo illustrato Tal nellrsquoultima colonna egrave mostrato invece il tempo di calcolo necessario con lrsquoalgoritmo di tipo esaustivo Tes i valori con sono dedotti ovviamente per estrapolazione dai tempi ottenuti per moduli p di 7 e di 8 cifre Si noti che egrave impensabile intraprendere un calcolo esaustivo per risolvere qualsiasi congruenza quadratica avente per modulo un primo p anche di solo 16 cifre Per una piugrave facile lettura dei valori numerici essi sono stati separati in gruppi di 7 cifre decimali come del resto calcolati nel programma avendo utilizzato per le

10

operazioni aritmetiche la Base (Radix) 710 di numerazione anzicheacute la normale Base 110 Si fa osservare che ad un gruppo di 7 cifre in base 10 si fa corrispondere una singola cifra in aritmetica in Base 710 Considerazioni sulla congruenza z 2 equiv Q (mod n ) con n composto Finora si sono considerate congruenze aventi come moduli numeri primi p Per diversi algoritmi crittografici occorre trovare i valori che soddisfano una congruenza del tipo z 2 equiv Q (mod n ) con n composto dal prodotto di due numeri primi cioegrave n = 21 pp sdot con 1p e 2p numeri primi grandi costituiti ciascuno anche da piugrave di 150 cifre decimali Cosa si puograve dire riguardo ad un tale tipo di congruenza quadratica In generale la risoluzione di una congruenza quadratica con modulo composto presenta le stesse difficoltagrave del problema della fattorizzazione di un numero in quanto il primo passo per la sua eventuale risoluzione egrave quello di scomporre in fattori il modulo n

In questo specifico caso perograve si supponga di conoscere a priori i fattori 1p e 2p che compongono il modulo Si supponga anche che n e Q siano primi tra loro cioegrave che si abbia (Q n) = 1 dove con tale simbologia viene indicato il Massimo Comun Divisore fra Q ed n Condizione indispensabile percheacute la congruenza z 2 equiv Q (mod 21 pp sdot ) sia risolubile egrave che siano risolubili entrambe le due seguenti congruenze z 2 equiv Q (mod 1p ) e z 2 equiv Q (mod 2p ) In effetti se anche una sola delle due congruenze non risulta risolubile anche la congruenza con modulo n = 21 pp sdot non lo egrave [Tch] [Nag] Una volta risolte le due congruenze quadratiche rispettivamente con modulo 1p e modulo 2p ciascuna delle quali presenteragrave due valori numerici che la soddisfano si avranno disponibili 4 congruenze lineari z equiv 11z (mod 1p ) z equiv 12z (mod 1p ) relative alla congruenza con modulo 1p z equiv 21z (mod 2p ) z equiv 22z (mod 2p ) relative alla congruenza con modulo 2p con le quali si possono formare 22 distinti sistemi di congruenze composti ciascuno da 2 congruenze lineariSi tenga presente che in uno qualsiasi di questi 4 sistemi non devono mai comparire due congruenze lineari i cui termini noti siano le soluzioni di una stessa congruenza quadratica Ersquo ben noto che per trovare una soluzione atta a soddisfare un insieme di congruenze lineari bisogna far ricorso al Teorema cinese dei resti Per detto teorema si puograve fare riferimento ad una vasta bibliografia di cui si riportano solo alcuni riferimenti [Bar] [Niv] [Wag] relativi anche ad indirizzi di Siti Internet [SI4][SI5] Questo teorema ci assicura che dato un insieme di congruenze lineari se i vari moduli delle congruenze sono relativamente primi fra loro esiste un valore comune tale da soddisfare simultaneamente ognuna della congruenze Utilizzandolo nel nostro caso avremo che un generico valore dei 4 valori di z 2 equiv Q (mod n ) che la soddisfano puograve essere trovato tramite la seguente formula

nz = iz1 middot 1b middot1p

n + iz2 middot 2b middot

2pn

con i = 12

dove ogni ib si ricava risolvendo la congruenza lineare ip

nmiddot ib equiv 1 ( mod ip )

Alcune applicazioni tecniche Vi sono delle interessanti applicazioni tecniche in cui vengono implicati e utilizzati argomenti trattati nel presente articolo specie nel campo delle telecomunicazioni e della crittografia Ci limiteremo ad elencare qui alcune di quelli indicati in [Shr] e in [Schn] Per i residui quadratici - Applicazione di successioni di residui quadratici nella progettazione riguardante unrsquoampia diffusione di onde sonore negli ambienti per migliorare la qualitagrave acustica - Possibili applicazioni nella copertura radar e sonar nella riduzione del rumore - Applicazione per la riduzione delle interferenze in particolare riguardo al ldquojammingrdquo nelle comunicazioni

11

via radio in cui egrave raccomandato lrsquouso di larghi spettri in effetti nellrsquoutilizzo di una stessa banda di frequenze fra piugrave utenti si puograve dimostrare che lrsquoattribuzione di particolari successioni di residui quadratici da assegnare ad ognuno di loro permette di ridurre al minimo le interferenze fra le varie trasmissioni pur essendo esse contemporanee Per le congruenze quadratiche Oltre al loro giagrave summenzionato utilizzo in uno dei piugrave efficienti metodi di scomposizione in fattori di numeri grandi (Quadratic Sieve Method) altre applicazioni riguardano soprattutto il campo della crittografia abbinata al campo delle telecomunicazioni quali ad esempio ndash il metodo crittografico di Rabin [Schn] vedi riquadro ndash il metodo di Ong ndash Shnorr- Shamir [Schn] relativo alla firma digitale ndash il metodo di zero ndash knowledge di Feige- Fiat - Shamir [Schn] dedicato allrsquorsquoautenticazione della firma

digitale Per le Sequenze di Lucas vi sono applicazioni che interessano sia crittosistemi a chiave pubblica come ad esempio il ldquoLUC Public Key Encriptionrdquo) valido quanto il crittosistema RSA sia test di primalitagrave Riguardo a questrsquoultimo argomento egrave da mettere in evidenza infatti che la ricerca e lrsquoindividuazione dei piugrave grandi numeri primi finora scoperti si egrave potuta realizzare grazie proprio allrsquoimpiego di dette sequenze METODO di RABIN

Il messaggio M viene crittografato secondo la relazione C equiv 2M ( mod N ) dove N egrave un numero composto dal prodotto di due grandi primi 1p e 2p ciascuno costituito da parecchie decine di cifre in ricezione lrsquoutente la cui chiave pubblica egrave il numero N

quando riceve il messaggio criptato C egrave lrsquounico a poterlo decifrare utilizzando le sue due chiavi segrete 1p e 2p Esso perograve deve

disporre di un algoritmo veloce ed efficace per decrittare il messaggio secondo la relazione 2z equiv C ( mod N ) la cui risoluzione

puograve essere effettuata solo risolvendo prima le due congruenze 2z equiv C (mod 1p ) e 2z equiv C (mod 2p ) quindi col ricorso del Teorema dei Resti Cinese risolvendo il sistema di due congruenze lineari impieganti le soluzioni delle suddette congruenze Si

dimostra infatti che uno dei quattro valori di z trovati che soddisfano la congruenza 2z equiv C ( mod N ) risulta essere il messaggio originale M Ersquo da osservare perograve che sussiste lrsquoambiguitagrave della scelta del messaggio effettivo fra i quattro valori di z Se il messaggio originale egrave un normale testo in italiano (o comunque in unrsquoaltra lingua) allora saragrave facile scegliere fra i quattro valori di z quello corretto In generale sussiste la suddetta ambiguitagrave ----------------------------------------------------------------------------- Un possibile metodo comunque non molto efficiente per ovviare a ciograve potrebbe essere il seguente lrsquoutente a cui egrave destinato il messaggio mette a disposizione due chiavi pubbliche 1N = 1p middot 2p e 2N = 3p middot 4p avendo come sue chiavi segrete i quattro

numeri primi 1p 2p 3p e 4p Esso riceveragrave pertanto due messaggi criptati 1C equiv 2M (mod 1N ) e 2C equiv 2M (mod

2N ) che decritteragrave risolvendo le due congruenze quadratiche 2z equiv 1C (mod 1N ) e 2z equiv 2C (mod 2N ) Si avranno cosigrave disponibili quattro valori risolutivi per la prima congruenza ed altri quattro per la seconda Osservando queste otto soluzioni solo due in generale saranno identiche una estratta fra le quattro della prima congruenza lrsquoaltra estratta dalle altre quattro relative alla seconda congruenza Saragrave pertanto questa soluzione comune il messaggio originale M Nota sui residui Occorre tener conto che sui residui ottenuti si possono effettuare se necessarie le seguenti operazioni lecite in aritmetica modulare 1 ) se rn lt 0 egrave il residuo negativo (mod p ) di un valore numerico negativo ndashR i molti casi risulta preferibile sostituire questo valore negativo rn con lrsquoequivalente (piugrave prossimo a 0) residuo rp positivo ( mod p) di ndashR che risulta essere rp = p - |rn| Tale sostituzione risulta indispensabile allorcheacute si devono effettuare i calcoli in aritmetica a precisione multipla su grandi valori numerici non sono trattabili neanche con lrsquoaritmetica la doppia precisione disponibile sul calcolatore nel linguaggio utilizzato 2) detto rd il residuo dispari di R ( mod p) per ottenere un intero quale residuo di rd 2 si calcola il

valore 2

prd + che saragrave senzrsquoaltro intero essendo pgt2 dispari

Questa operazione deve essere effettuata ad esempio quando nelle formule (7) e (8) utilizzate per il calcolo del residuo di 2middotU(2k+1) e di 2middotV(2k+1) il risultato dei calcoli (mod p) egrave un numero dispari dovendo trovare invece il residuo di U(2k+1) o di V(2k+1)

12

RIFERIMENTI [Bar] - GC Barozzi Aritmetica un approccio computazionale Zanichelli Bologna 1991 [Bre] - DMBressoud Factorization and Primality Testing Springer-Verlag New York 1989 [Cip] - MCipolla Teoria dei numeri Analisi Indeterminata in Enciclopedia delle Matematiche Elementari volI parte I Cap IV ndash Parte seconda - U Hoepli editore Milano [Dic] - L E Dickson ndash History of the Theory of Numbers Vol I ChapVII - Chelsea Publishing Company New York 1992 [Eul] - L Euler Eleacutemens drsquoAlgegravebre ndashTome second Analise Indetermineacutee Bachelier Librairie pour le Matheacutematiques Paris 1807 [Hur] - A Hurwitz ndash N Kritikos Lectures on Number Theory Springer-Verlag New York 1986 [Kob] - N Kobliz A Course in Number Theory and Criptography Springer-Verlag New York 1994 [Kra] - EKranakis Primality and Cryptography JWiley amp Sons 1986 [Lan] - E Landau Elementary Number Theory Chelsea Publishing Company New York 1966 Nag] - T Nagell Introduction to Number Theory Chelsea Publishing Company New York 1981 [Niv] - I Niven - HSZuckerman An Introduction to the Theory of Numbers JWiley amp Sons 1980 [Old] - CD Olds Frazioni continue Collana di Matematica Moderna ndash vol MM5 Zanichelli Bologna 1970 [Pom] - C Pomerance Alla ricerca dei numeri primi Le Scienze - quaderni n14 marzo 1984 [Rib] - P Ribenboim The Book of Prime Number Records Springer-Verlag New York 1989 [Rie] H Riesel Prime Number and Computer Methods for Factorization Birkhaumluser Boston 1985 [Rob] - G Robin Algorithmique et cryptographie Mathematiques amp Applications vol ndeg 8 (1991) Ellipses ndash Edition Marketing [Sch] - MR Schroeder La Teoria dei Numeri franco muzio amp ceditore Padova 1986 [Schn] - B Schneider Applied Cryptography John Wiley amp SInc New York [Tch] - P L Tchebichef Teoria delle Congruenze E Loescher amp Cdeg Roma 1895 [Te1] - C Teodoro La Generazione della chiave privata nellrsquoalgoritmo crittografico RSA a chiave pubblica in ldquomatematicamenteit ndash sezione Applicazioni Ingegneriardquo [Te2] - C Teodoro Un metodo per il calcolo veloce dei numeri di Fibonacci e di Lucas La Comunicazione anno 2001 Vol XLX [Wag] - SWagon Guida a Matematica ( capitoli 8 e 9) McGraw ndashHill Libri Italia srl Milano 1995 Siti Internet [SI0] - httpaieecsumichedupeopleroundsWinter02SlidesLectureApril4pdf [SI1] - http164813169Enciklopedijamathmathjj026htm [SI2] - httpwwwmathswtedu~hazprob_setsnotesnode34html [SI3] - httpmathworldwolframcomLucasSequencehtml [SI4] - httpmathworldwolframcomQuadraticSievehtml [SI5] - httpwwwmathksuedumath511notesiqs2000htm [SI6] - httpnethzchstudentralbrunnTQShtml [SI7] - httpmathworldwolframcomChinese Remainder Theoremhtml [SI8] - httpwwwmathswtedu~hazprob_setsnotesnode25html

Vengono riportati nelle pagine seguenti

- alcuni esempi di calcolo per congruenze con valori di q e di p non grandi ottenuti utilizzando il programma riportato in ALLEGATO 1

- una Tabella riguardante diversi risultati di risoluzione di congruenze quadratiche presentanti valori di Q e di p grandi e quindi risolte con lrsquoimpiego di apposito programma utilizzante una aritmetica a precisione multipla - altri esempi di calcolo per congruenze presentanti anche valori di Q e di p grandi risolte utilizzando un apposito programma con aritmetica a precisione multipla

13

ESEMPI di risoluzione della congruenza )(mod2 pQz equiv con lrsquoutilizzo del programma in Allegato 1

ESEMPIO n1 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q876543 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p113 k5 = 57 k4 = 28 k3 = 14 k2 = 7 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 5 1 ^it U( 3 ) = 23 V( 3 ) = 95 2 ^it U( 7 ) = 23 V( 7 ) = 76 3 ^it U( 14 ) = 53 V( 14 ) = 96 4 ^it U( 28 ) = 3 V( 28 ) = 65 5 ^it U( 57 ) = 0 V( 57 ) = 11 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 876543 (mod 113 )SONO z1 = 62 z2 = 51 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-7723 che (z2^2 - Q) p =-7734 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

14

ESEMPIO n2 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -47 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 1427 k9 = 714 k8 = 357 k7 = 178 k6 = 89 k5 = 44 k4 = 22 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 103 2 ^it U( 5 ) = 705 V( 5 ) = 1194 3 ^it U( 11 ) = 926 V( 11 ) = 581 4 ^it U( 22 ) = 27 V( 22 ) = 1218 5 ^it U( 44 ) = 65 V( 44 ) = 892 6 ^it U( 89 ) = 582 V( 89 ) = 726 7 ^it U( 178 ) = 140 V( 178 ) = 597 8 ^it U( 357 ) = 0 V( 357 ) = 885 9 ^it U( 714 ) = 0 V( 714 ) = 1328 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-47 (mod 1427 ) SONO z1 = 664 z2 = 763 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 309 che (z2^2 - Q) p = 408 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

10

operazioni aritmetiche la Base (Radix) 710 di numerazione anzicheacute la normale Base 110 Si fa osservare che ad un gruppo di 7 cifre in base 10 si fa corrispondere una singola cifra in aritmetica in Base 710 Considerazioni sulla congruenza z 2 equiv Q (mod n ) con n composto Finora si sono considerate congruenze aventi come moduli numeri primi p Per diversi algoritmi crittografici occorre trovare i valori che soddisfano una congruenza del tipo z 2 equiv Q (mod n ) con n composto dal prodotto di due numeri primi cioegrave n = 21 pp sdot con 1p e 2p numeri primi grandi costituiti ciascuno anche da piugrave di 150 cifre decimali Cosa si puograve dire riguardo ad un tale tipo di congruenza quadratica In generale la risoluzione di una congruenza quadratica con modulo composto presenta le stesse difficoltagrave del problema della fattorizzazione di un numero in quanto il primo passo per la sua eventuale risoluzione egrave quello di scomporre in fattori il modulo n

In questo specifico caso perograve si supponga di conoscere a priori i fattori 1p e 2p che compongono il modulo Si supponga anche che n e Q siano primi tra loro cioegrave che si abbia (Q n) = 1 dove con tale simbologia viene indicato il Massimo Comun Divisore fra Q ed n Condizione indispensabile percheacute la congruenza z 2 equiv Q (mod 21 pp sdot ) sia risolubile egrave che siano risolubili entrambe le due seguenti congruenze z 2 equiv Q (mod 1p ) e z 2 equiv Q (mod 2p ) In effetti se anche una sola delle due congruenze non risulta risolubile anche la congruenza con modulo n = 21 pp sdot non lo egrave [Tch] [Nag] Una volta risolte le due congruenze quadratiche rispettivamente con modulo 1p e modulo 2p ciascuna delle quali presenteragrave due valori numerici che la soddisfano si avranno disponibili 4 congruenze lineari z equiv 11z (mod 1p ) z equiv 12z (mod 1p ) relative alla congruenza con modulo 1p z equiv 21z (mod 2p ) z equiv 22z (mod 2p ) relative alla congruenza con modulo 2p con le quali si possono formare 22 distinti sistemi di congruenze composti ciascuno da 2 congruenze lineariSi tenga presente che in uno qualsiasi di questi 4 sistemi non devono mai comparire due congruenze lineari i cui termini noti siano le soluzioni di una stessa congruenza quadratica Ersquo ben noto che per trovare una soluzione atta a soddisfare un insieme di congruenze lineari bisogna far ricorso al Teorema cinese dei resti Per detto teorema si puograve fare riferimento ad una vasta bibliografia di cui si riportano solo alcuni riferimenti [Bar] [Niv] [Wag] relativi anche ad indirizzi di Siti Internet [SI4][SI5] Questo teorema ci assicura che dato un insieme di congruenze lineari se i vari moduli delle congruenze sono relativamente primi fra loro esiste un valore comune tale da soddisfare simultaneamente ognuna della congruenze Utilizzandolo nel nostro caso avremo che un generico valore dei 4 valori di z 2 equiv Q (mod n ) che la soddisfano puograve essere trovato tramite la seguente formula

nz = iz1 middot 1b middot1p

n + iz2 middot 2b middot

2pn

con i = 12

dove ogni ib si ricava risolvendo la congruenza lineare ip

nmiddot ib equiv 1 ( mod ip )

Alcune applicazioni tecniche Vi sono delle interessanti applicazioni tecniche in cui vengono implicati e utilizzati argomenti trattati nel presente articolo specie nel campo delle telecomunicazioni e della crittografia Ci limiteremo ad elencare qui alcune di quelli indicati in [Shr] e in [Schn] Per i residui quadratici - Applicazione di successioni di residui quadratici nella progettazione riguardante unrsquoampia diffusione di onde sonore negli ambienti per migliorare la qualitagrave acustica - Possibili applicazioni nella copertura radar e sonar nella riduzione del rumore - Applicazione per la riduzione delle interferenze in particolare riguardo al ldquojammingrdquo nelle comunicazioni

11

via radio in cui egrave raccomandato lrsquouso di larghi spettri in effetti nellrsquoutilizzo di una stessa banda di frequenze fra piugrave utenti si puograve dimostrare che lrsquoattribuzione di particolari successioni di residui quadratici da assegnare ad ognuno di loro permette di ridurre al minimo le interferenze fra le varie trasmissioni pur essendo esse contemporanee Per le congruenze quadratiche Oltre al loro giagrave summenzionato utilizzo in uno dei piugrave efficienti metodi di scomposizione in fattori di numeri grandi (Quadratic Sieve Method) altre applicazioni riguardano soprattutto il campo della crittografia abbinata al campo delle telecomunicazioni quali ad esempio ndash il metodo crittografico di Rabin [Schn] vedi riquadro ndash il metodo di Ong ndash Shnorr- Shamir [Schn] relativo alla firma digitale ndash il metodo di zero ndash knowledge di Feige- Fiat - Shamir [Schn] dedicato allrsquorsquoautenticazione della firma

digitale Per le Sequenze di Lucas vi sono applicazioni che interessano sia crittosistemi a chiave pubblica come ad esempio il ldquoLUC Public Key Encriptionrdquo) valido quanto il crittosistema RSA sia test di primalitagrave Riguardo a questrsquoultimo argomento egrave da mettere in evidenza infatti che la ricerca e lrsquoindividuazione dei piugrave grandi numeri primi finora scoperti si egrave potuta realizzare grazie proprio allrsquoimpiego di dette sequenze METODO di RABIN

Il messaggio M viene crittografato secondo la relazione C equiv 2M ( mod N ) dove N egrave un numero composto dal prodotto di due grandi primi 1p e 2p ciascuno costituito da parecchie decine di cifre in ricezione lrsquoutente la cui chiave pubblica egrave il numero N

quando riceve il messaggio criptato C egrave lrsquounico a poterlo decifrare utilizzando le sue due chiavi segrete 1p e 2p Esso perograve deve

disporre di un algoritmo veloce ed efficace per decrittare il messaggio secondo la relazione 2z equiv C ( mod N ) la cui risoluzione

puograve essere effettuata solo risolvendo prima le due congruenze 2z equiv C (mod 1p ) e 2z equiv C (mod 2p ) quindi col ricorso del Teorema dei Resti Cinese risolvendo il sistema di due congruenze lineari impieganti le soluzioni delle suddette congruenze Si

dimostra infatti che uno dei quattro valori di z trovati che soddisfano la congruenza 2z equiv C ( mod N ) risulta essere il messaggio originale M Ersquo da osservare perograve che sussiste lrsquoambiguitagrave della scelta del messaggio effettivo fra i quattro valori di z Se il messaggio originale egrave un normale testo in italiano (o comunque in unrsquoaltra lingua) allora saragrave facile scegliere fra i quattro valori di z quello corretto In generale sussiste la suddetta ambiguitagrave ----------------------------------------------------------------------------- Un possibile metodo comunque non molto efficiente per ovviare a ciograve potrebbe essere il seguente lrsquoutente a cui egrave destinato il messaggio mette a disposizione due chiavi pubbliche 1N = 1p middot 2p e 2N = 3p middot 4p avendo come sue chiavi segrete i quattro

numeri primi 1p 2p 3p e 4p Esso riceveragrave pertanto due messaggi criptati 1C equiv 2M (mod 1N ) e 2C equiv 2M (mod

2N ) che decritteragrave risolvendo le due congruenze quadratiche 2z equiv 1C (mod 1N ) e 2z equiv 2C (mod 2N ) Si avranno cosigrave disponibili quattro valori risolutivi per la prima congruenza ed altri quattro per la seconda Osservando queste otto soluzioni solo due in generale saranno identiche una estratta fra le quattro della prima congruenza lrsquoaltra estratta dalle altre quattro relative alla seconda congruenza Saragrave pertanto questa soluzione comune il messaggio originale M Nota sui residui Occorre tener conto che sui residui ottenuti si possono effettuare se necessarie le seguenti operazioni lecite in aritmetica modulare 1 ) se rn lt 0 egrave il residuo negativo (mod p ) di un valore numerico negativo ndashR i molti casi risulta preferibile sostituire questo valore negativo rn con lrsquoequivalente (piugrave prossimo a 0) residuo rp positivo ( mod p) di ndashR che risulta essere rp = p - |rn| Tale sostituzione risulta indispensabile allorcheacute si devono effettuare i calcoli in aritmetica a precisione multipla su grandi valori numerici non sono trattabili neanche con lrsquoaritmetica la doppia precisione disponibile sul calcolatore nel linguaggio utilizzato 2) detto rd il residuo dispari di R ( mod p) per ottenere un intero quale residuo di rd 2 si calcola il

valore 2

prd + che saragrave senzrsquoaltro intero essendo pgt2 dispari

Questa operazione deve essere effettuata ad esempio quando nelle formule (7) e (8) utilizzate per il calcolo del residuo di 2middotU(2k+1) e di 2middotV(2k+1) il risultato dei calcoli (mod p) egrave un numero dispari dovendo trovare invece il residuo di U(2k+1) o di V(2k+1)

12

RIFERIMENTI [Bar] - GC Barozzi Aritmetica un approccio computazionale Zanichelli Bologna 1991 [Bre] - DMBressoud Factorization and Primality Testing Springer-Verlag New York 1989 [Cip] - MCipolla Teoria dei numeri Analisi Indeterminata in Enciclopedia delle Matematiche Elementari volI parte I Cap IV ndash Parte seconda - U Hoepli editore Milano [Dic] - L E Dickson ndash History of the Theory of Numbers Vol I ChapVII - Chelsea Publishing Company New York 1992 [Eul] - L Euler Eleacutemens drsquoAlgegravebre ndashTome second Analise Indetermineacutee Bachelier Librairie pour le Matheacutematiques Paris 1807 [Hur] - A Hurwitz ndash N Kritikos Lectures on Number Theory Springer-Verlag New York 1986 [Kob] - N Kobliz A Course in Number Theory and Criptography Springer-Verlag New York 1994 [Kra] - EKranakis Primality and Cryptography JWiley amp Sons 1986 [Lan] - E Landau Elementary Number Theory Chelsea Publishing Company New York 1966 Nag] - T Nagell Introduction to Number Theory Chelsea Publishing Company New York 1981 [Niv] - I Niven - HSZuckerman An Introduction to the Theory of Numbers JWiley amp Sons 1980 [Old] - CD Olds Frazioni continue Collana di Matematica Moderna ndash vol MM5 Zanichelli Bologna 1970 [Pom] - C Pomerance Alla ricerca dei numeri primi Le Scienze - quaderni n14 marzo 1984 [Rib] - P Ribenboim The Book of Prime Number Records Springer-Verlag New York 1989 [Rie] H Riesel Prime Number and Computer Methods for Factorization Birkhaumluser Boston 1985 [Rob] - G Robin Algorithmique et cryptographie Mathematiques amp Applications vol ndeg 8 (1991) Ellipses ndash Edition Marketing [Sch] - MR Schroeder La Teoria dei Numeri franco muzio amp ceditore Padova 1986 [Schn] - B Schneider Applied Cryptography John Wiley amp SInc New York [Tch] - P L Tchebichef Teoria delle Congruenze E Loescher amp Cdeg Roma 1895 [Te1] - C Teodoro La Generazione della chiave privata nellrsquoalgoritmo crittografico RSA a chiave pubblica in ldquomatematicamenteit ndash sezione Applicazioni Ingegneriardquo [Te2] - C Teodoro Un metodo per il calcolo veloce dei numeri di Fibonacci e di Lucas La Comunicazione anno 2001 Vol XLX [Wag] - SWagon Guida a Matematica ( capitoli 8 e 9) McGraw ndashHill Libri Italia srl Milano 1995 Siti Internet [SI0] - httpaieecsumichedupeopleroundsWinter02SlidesLectureApril4pdf [SI1] - http164813169Enciklopedijamathmathjj026htm [SI2] - httpwwwmathswtedu~hazprob_setsnotesnode34html [SI3] - httpmathworldwolframcomLucasSequencehtml [SI4] - httpmathworldwolframcomQuadraticSievehtml [SI5] - httpwwwmathksuedumath511notesiqs2000htm [SI6] - httpnethzchstudentralbrunnTQShtml [SI7] - httpmathworldwolframcomChinese Remainder Theoremhtml [SI8] - httpwwwmathswtedu~hazprob_setsnotesnode25html

Vengono riportati nelle pagine seguenti

- alcuni esempi di calcolo per congruenze con valori di q e di p non grandi ottenuti utilizzando il programma riportato in ALLEGATO 1

- una Tabella riguardante diversi risultati di risoluzione di congruenze quadratiche presentanti valori di Q e di p grandi e quindi risolte con lrsquoimpiego di apposito programma utilizzante una aritmetica a precisione multipla - altri esempi di calcolo per congruenze presentanti anche valori di Q e di p grandi risolte utilizzando un apposito programma con aritmetica a precisione multipla

13

ESEMPI di risoluzione della congruenza )(mod2 pQz equiv con lrsquoutilizzo del programma in Allegato 1

ESEMPIO n1 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q876543 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p113 k5 = 57 k4 = 28 k3 = 14 k2 = 7 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 5 1 ^it U( 3 ) = 23 V( 3 ) = 95 2 ^it U( 7 ) = 23 V( 7 ) = 76 3 ^it U( 14 ) = 53 V( 14 ) = 96 4 ^it U( 28 ) = 3 V( 28 ) = 65 5 ^it U( 57 ) = 0 V( 57 ) = 11 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 876543 (mod 113 )SONO z1 = 62 z2 = 51 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-7723 che (z2^2 - Q) p =-7734 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

14

ESEMPIO n2 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -47 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 1427 k9 = 714 k8 = 357 k7 = 178 k6 = 89 k5 = 44 k4 = 22 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 103 2 ^it U( 5 ) = 705 V( 5 ) = 1194 3 ^it U( 11 ) = 926 V( 11 ) = 581 4 ^it U( 22 ) = 27 V( 22 ) = 1218 5 ^it U( 44 ) = 65 V( 44 ) = 892 6 ^it U( 89 ) = 582 V( 89 ) = 726 7 ^it U( 178 ) = 140 V( 178 ) = 597 8 ^it U( 357 ) = 0 V( 357 ) = 885 9 ^it U( 714 ) = 0 V( 714 ) = 1328 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-47 (mod 1427 ) SONO z1 = 664 z2 = 763 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 309 che (z2^2 - Q) p = 408 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

11

via radio in cui egrave raccomandato lrsquouso di larghi spettri in effetti nellrsquoutilizzo di una stessa banda di frequenze fra piugrave utenti si puograve dimostrare che lrsquoattribuzione di particolari successioni di residui quadratici da assegnare ad ognuno di loro permette di ridurre al minimo le interferenze fra le varie trasmissioni pur essendo esse contemporanee Per le congruenze quadratiche Oltre al loro giagrave summenzionato utilizzo in uno dei piugrave efficienti metodi di scomposizione in fattori di numeri grandi (Quadratic Sieve Method) altre applicazioni riguardano soprattutto il campo della crittografia abbinata al campo delle telecomunicazioni quali ad esempio ndash il metodo crittografico di Rabin [Schn] vedi riquadro ndash il metodo di Ong ndash Shnorr- Shamir [Schn] relativo alla firma digitale ndash il metodo di zero ndash knowledge di Feige- Fiat - Shamir [Schn] dedicato allrsquorsquoautenticazione della firma

digitale Per le Sequenze di Lucas vi sono applicazioni che interessano sia crittosistemi a chiave pubblica come ad esempio il ldquoLUC Public Key Encriptionrdquo) valido quanto il crittosistema RSA sia test di primalitagrave Riguardo a questrsquoultimo argomento egrave da mettere in evidenza infatti che la ricerca e lrsquoindividuazione dei piugrave grandi numeri primi finora scoperti si egrave potuta realizzare grazie proprio allrsquoimpiego di dette sequenze METODO di RABIN

Il messaggio M viene crittografato secondo la relazione C equiv 2M ( mod N ) dove N egrave un numero composto dal prodotto di due grandi primi 1p e 2p ciascuno costituito da parecchie decine di cifre in ricezione lrsquoutente la cui chiave pubblica egrave il numero N

quando riceve il messaggio criptato C egrave lrsquounico a poterlo decifrare utilizzando le sue due chiavi segrete 1p e 2p Esso perograve deve

disporre di un algoritmo veloce ed efficace per decrittare il messaggio secondo la relazione 2z equiv C ( mod N ) la cui risoluzione

puograve essere effettuata solo risolvendo prima le due congruenze 2z equiv C (mod 1p ) e 2z equiv C (mod 2p ) quindi col ricorso del Teorema dei Resti Cinese risolvendo il sistema di due congruenze lineari impieganti le soluzioni delle suddette congruenze Si

dimostra infatti che uno dei quattro valori di z trovati che soddisfano la congruenza 2z equiv C ( mod N ) risulta essere il messaggio originale M Ersquo da osservare perograve che sussiste lrsquoambiguitagrave della scelta del messaggio effettivo fra i quattro valori di z Se il messaggio originale egrave un normale testo in italiano (o comunque in unrsquoaltra lingua) allora saragrave facile scegliere fra i quattro valori di z quello corretto In generale sussiste la suddetta ambiguitagrave ----------------------------------------------------------------------------- Un possibile metodo comunque non molto efficiente per ovviare a ciograve potrebbe essere il seguente lrsquoutente a cui egrave destinato il messaggio mette a disposizione due chiavi pubbliche 1N = 1p middot 2p e 2N = 3p middot 4p avendo come sue chiavi segrete i quattro

numeri primi 1p 2p 3p e 4p Esso riceveragrave pertanto due messaggi criptati 1C equiv 2M (mod 1N ) e 2C equiv 2M (mod

2N ) che decritteragrave risolvendo le due congruenze quadratiche 2z equiv 1C (mod 1N ) e 2z equiv 2C (mod 2N ) Si avranno cosigrave disponibili quattro valori risolutivi per la prima congruenza ed altri quattro per la seconda Osservando queste otto soluzioni solo due in generale saranno identiche una estratta fra le quattro della prima congruenza lrsquoaltra estratta dalle altre quattro relative alla seconda congruenza Saragrave pertanto questa soluzione comune il messaggio originale M Nota sui residui Occorre tener conto che sui residui ottenuti si possono effettuare se necessarie le seguenti operazioni lecite in aritmetica modulare 1 ) se rn lt 0 egrave il residuo negativo (mod p ) di un valore numerico negativo ndashR i molti casi risulta preferibile sostituire questo valore negativo rn con lrsquoequivalente (piugrave prossimo a 0) residuo rp positivo ( mod p) di ndashR che risulta essere rp = p - |rn| Tale sostituzione risulta indispensabile allorcheacute si devono effettuare i calcoli in aritmetica a precisione multipla su grandi valori numerici non sono trattabili neanche con lrsquoaritmetica la doppia precisione disponibile sul calcolatore nel linguaggio utilizzato 2) detto rd il residuo dispari di R ( mod p) per ottenere un intero quale residuo di rd 2 si calcola il

valore 2

prd + che saragrave senzrsquoaltro intero essendo pgt2 dispari

Questa operazione deve essere effettuata ad esempio quando nelle formule (7) e (8) utilizzate per il calcolo del residuo di 2middotU(2k+1) e di 2middotV(2k+1) il risultato dei calcoli (mod p) egrave un numero dispari dovendo trovare invece il residuo di U(2k+1) o di V(2k+1)

12

RIFERIMENTI [Bar] - GC Barozzi Aritmetica un approccio computazionale Zanichelli Bologna 1991 [Bre] - DMBressoud Factorization and Primality Testing Springer-Verlag New York 1989 [Cip] - MCipolla Teoria dei numeri Analisi Indeterminata in Enciclopedia delle Matematiche Elementari volI parte I Cap IV ndash Parte seconda - U Hoepli editore Milano [Dic] - L E Dickson ndash History of the Theory of Numbers Vol I ChapVII - Chelsea Publishing Company New York 1992 [Eul] - L Euler Eleacutemens drsquoAlgegravebre ndashTome second Analise Indetermineacutee Bachelier Librairie pour le Matheacutematiques Paris 1807 [Hur] - A Hurwitz ndash N Kritikos Lectures on Number Theory Springer-Verlag New York 1986 [Kob] - N Kobliz A Course in Number Theory and Criptography Springer-Verlag New York 1994 [Kra] - EKranakis Primality and Cryptography JWiley amp Sons 1986 [Lan] - E Landau Elementary Number Theory Chelsea Publishing Company New York 1966 Nag] - T Nagell Introduction to Number Theory Chelsea Publishing Company New York 1981 [Niv] - I Niven - HSZuckerman An Introduction to the Theory of Numbers JWiley amp Sons 1980 [Old] - CD Olds Frazioni continue Collana di Matematica Moderna ndash vol MM5 Zanichelli Bologna 1970 [Pom] - C Pomerance Alla ricerca dei numeri primi Le Scienze - quaderni n14 marzo 1984 [Rib] - P Ribenboim The Book of Prime Number Records Springer-Verlag New York 1989 [Rie] H Riesel Prime Number and Computer Methods for Factorization Birkhaumluser Boston 1985 [Rob] - G Robin Algorithmique et cryptographie Mathematiques amp Applications vol ndeg 8 (1991) Ellipses ndash Edition Marketing [Sch] - MR Schroeder La Teoria dei Numeri franco muzio amp ceditore Padova 1986 [Schn] - B Schneider Applied Cryptography John Wiley amp SInc New York [Tch] - P L Tchebichef Teoria delle Congruenze E Loescher amp Cdeg Roma 1895 [Te1] - C Teodoro La Generazione della chiave privata nellrsquoalgoritmo crittografico RSA a chiave pubblica in ldquomatematicamenteit ndash sezione Applicazioni Ingegneriardquo [Te2] - C Teodoro Un metodo per il calcolo veloce dei numeri di Fibonacci e di Lucas La Comunicazione anno 2001 Vol XLX [Wag] - SWagon Guida a Matematica ( capitoli 8 e 9) McGraw ndashHill Libri Italia srl Milano 1995 Siti Internet [SI0] - httpaieecsumichedupeopleroundsWinter02SlidesLectureApril4pdf [SI1] - http164813169Enciklopedijamathmathjj026htm [SI2] - httpwwwmathswtedu~hazprob_setsnotesnode34html [SI3] - httpmathworldwolframcomLucasSequencehtml [SI4] - httpmathworldwolframcomQuadraticSievehtml [SI5] - httpwwwmathksuedumath511notesiqs2000htm [SI6] - httpnethzchstudentralbrunnTQShtml [SI7] - httpmathworldwolframcomChinese Remainder Theoremhtml [SI8] - httpwwwmathswtedu~hazprob_setsnotesnode25html

Vengono riportati nelle pagine seguenti

- alcuni esempi di calcolo per congruenze con valori di q e di p non grandi ottenuti utilizzando il programma riportato in ALLEGATO 1

- una Tabella riguardante diversi risultati di risoluzione di congruenze quadratiche presentanti valori di Q e di p grandi e quindi risolte con lrsquoimpiego di apposito programma utilizzante una aritmetica a precisione multipla - altri esempi di calcolo per congruenze presentanti anche valori di Q e di p grandi risolte utilizzando un apposito programma con aritmetica a precisione multipla

13

ESEMPI di risoluzione della congruenza )(mod2 pQz equiv con lrsquoutilizzo del programma in Allegato 1

ESEMPIO n1 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q876543 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p113 k5 = 57 k4 = 28 k3 = 14 k2 = 7 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 5 1 ^it U( 3 ) = 23 V( 3 ) = 95 2 ^it U( 7 ) = 23 V( 7 ) = 76 3 ^it U( 14 ) = 53 V( 14 ) = 96 4 ^it U( 28 ) = 3 V( 28 ) = 65 5 ^it U( 57 ) = 0 V( 57 ) = 11 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 876543 (mod 113 )SONO z1 = 62 z2 = 51 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-7723 che (z2^2 - Q) p =-7734 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

14

ESEMPIO n2 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -47 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 1427 k9 = 714 k8 = 357 k7 = 178 k6 = 89 k5 = 44 k4 = 22 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 103 2 ^it U( 5 ) = 705 V( 5 ) = 1194 3 ^it U( 11 ) = 926 V( 11 ) = 581 4 ^it U( 22 ) = 27 V( 22 ) = 1218 5 ^it U( 44 ) = 65 V( 44 ) = 892 6 ^it U( 89 ) = 582 V( 89 ) = 726 7 ^it U( 178 ) = 140 V( 178 ) = 597 8 ^it U( 357 ) = 0 V( 357 ) = 885 9 ^it U( 714 ) = 0 V( 714 ) = 1328 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-47 (mod 1427 ) SONO z1 = 664 z2 = 763 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 309 che (z2^2 - Q) p = 408 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

12

RIFERIMENTI [Bar] - GC Barozzi Aritmetica un approccio computazionale Zanichelli Bologna 1991 [Bre] - DMBressoud Factorization and Primality Testing Springer-Verlag New York 1989 [Cip] - MCipolla Teoria dei numeri Analisi Indeterminata in Enciclopedia delle Matematiche Elementari volI parte I Cap IV ndash Parte seconda - U Hoepli editore Milano [Dic] - L E Dickson ndash History of the Theory of Numbers Vol I ChapVII - Chelsea Publishing Company New York 1992 [Eul] - L Euler Eleacutemens drsquoAlgegravebre ndashTome second Analise Indetermineacutee Bachelier Librairie pour le Matheacutematiques Paris 1807 [Hur] - A Hurwitz ndash N Kritikos Lectures on Number Theory Springer-Verlag New York 1986 [Kob] - N Kobliz A Course in Number Theory and Criptography Springer-Verlag New York 1994 [Kra] - EKranakis Primality and Cryptography JWiley amp Sons 1986 [Lan] - E Landau Elementary Number Theory Chelsea Publishing Company New York 1966 Nag] - T Nagell Introduction to Number Theory Chelsea Publishing Company New York 1981 [Niv] - I Niven - HSZuckerman An Introduction to the Theory of Numbers JWiley amp Sons 1980 [Old] - CD Olds Frazioni continue Collana di Matematica Moderna ndash vol MM5 Zanichelli Bologna 1970 [Pom] - C Pomerance Alla ricerca dei numeri primi Le Scienze - quaderni n14 marzo 1984 [Rib] - P Ribenboim The Book of Prime Number Records Springer-Verlag New York 1989 [Rie] H Riesel Prime Number and Computer Methods for Factorization Birkhaumluser Boston 1985 [Rob] - G Robin Algorithmique et cryptographie Mathematiques amp Applications vol ndeg 8 (1991) Ellipses ndash Edition Marketing [Sch] - MR Schroeder La Teoria dei Numeri franco muzio amp ceditore Padova 1986 [Schn] - B Schneider Applied Cryptography John Wiley amp SInc New York [Tch] - P L Tchebichef Teoria delle Congruenze E Loescher amp Cdeg Roma 1895 [Te1] - C Teodoro La Generazione della chiave privata nellrsquoalgoritmo crittografico RSA a chiave pubblica in ldquomatematicamenteit ndash sezione Applicazioni Ingegneriardquo [Te2] - C Teodoro Un metodo per il calcolo veloce dei numeri di Fibonacci e di Lucas La Comunicazione anno 2001 Vol XLX [Wag] - SWagon Guida a Matematica ( capitoli 8 e 9) McGraw ndashHill Libri Italia srl Milano 1995 Siti Internet [SI0] - httpaieecsumichedupeopleroundsWinter02SlidesLectureApril4pdf [SI1] - http164813169Enciklopedijamathmathjj026htm [SI2] - httpwwwmathswtedu~hazprob_setsnotesnode34html [SI3] - httpmathworldwolframcomLucasSequencehtml [SI4] - httpmathworldwolframcomQuadraticSievehtml [SI5] - httpwwwmathksuedumath511notesiqs2000htm [SI6] - httpnethzchstudentralbrunnTQShtml [SI7] - httpmathworldwolframcomChinese Remainder Theoremhtml [SI8] - httpwwwmathswtedu~hazprob_setsnotesnode25html

Vengono riportati nelle pagine seguenti

- alcuni esempi di calcolo per congruenze con valori di q e di p non grandi ottenuti utilizzando il programma riportato in ALLEGATO 1

- una Tabella riguardante diversi risultati di risoluzione di congruenze quadratiche presentanti valori di Q e di p grandi e quindi risolte con lrsquoimpiego di apposito programma utilizzante una aritmetica a precisione multipla - altri esempi di calcolo per congruenze presentanti anche valori di Q e di p grandi risolte utilizzando un apposito programma con aritmetica a precisione multipla

13

ESEMPI di risoluzione della congruenza )(mod2 pQz equiv con lrsquoutilizzo del programma in Allegato 1

ESEMPIO n1 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q876543 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p113 k5 = 57 k4 = 28 k3 = 14 k2 = 7 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 5 1 ^it U( 3 ) = 23 V( 3 ) = 95 2 ^it U( 7 ) = 23 V( 7 ) = 76 3 ^it U( 14 ) = 53 V( 14 ) = 96 4 ^it U( 28 ) = 3 V( 28 ) = 65 5 ^it U( 57 ) = 0 V( 57 ) = 11 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 876543 (mod 113 )SONO z1 = 62 z2 = 51 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-7723 che (z2^2 - Q) p =-7734 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

14

ESEMPIO n2 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -47 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 1427 k9 = 714 k8 = 357 k7 = 178 k6 = 89 k5 = 44 k4 = 22 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 103 2 ^it U( 5 ) = 705 V( 5 ) = 1194 3 ^it U( 11 ) = 926 V( 11 ) = 581 4 ^it U( 22 ) = 27 V( 22 ) = 1218 5 ^it U( 44 ) = 65 V( 44 ) = 892 6 ^it U( 89 ) = 582 V( 89 ) = 726 7 ^it U( 178 ) = 140 V( 178 ) = 597 8 ^it U( 357 ) = 0 V( 357 ) = 885 9 ^it U( 714 ) = 0 V( 714 ) = 1328 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-47 (mod 1427 ) SONO z1 = 664 z2 = 763 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 309 che (z2^2 - Q) p = 408 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

13

ESEMPI di risoluzione della congruenza )(mod2 pQz equiv con lrsquoutilizzo del programma in Allegato 1

ESEMPIO n1 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q876543 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p113 k5 = 57 k4 = 28 k3 = 14 k2 = 7 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 5 1 ^it U( 3 ) = 23 V( 3 ) = 95 2 ^it U( 7 ) = 23 V( 7 ) = 76 3 ^it U( 14 ) = 53 V( 14 ) = 96 4 ^it U( 28 ) = 3 V( 28 ) = 65 5 ^it U( 57 ) = 0 V( 57 ) = 11 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 876543 (mod 113 )SONO z1 = 62 z2 = 51 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-7723 che (z2^2 - Q) p =-7734 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

14

ESEMPIO n2 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -47 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 1427 k9 = 714 k8 = 357 k7 = 178 k6 = 89 k5 = 44 k4 = 22 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 103 2 ^it U( 5 ) = 705 V( 5 ) = 1194 3 ^it U( 11 ) = 926 V( 11 ) = 581 4 ^it U( 22 ) = 27 V( 22 ) = 1218 5 ^it U( 44 ) = 65 V( 44 ) = 892 6 ^it U( 89 ) = 582 V( 89 ) = 726 7 ^it U( 178 ) = 140 V( 178 ) = 597 8 ^it U( 357 ) = 0 V( 357 ) = 885 9 ^it U( 714 ) = 0 V( 714 ) = 1328 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-47 (mod 1427 ) SONO z1 = 664 z2 = 763 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 309 che (z2^2 - Q) p = 408 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

14

ESEMPIO n2 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -47 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 1427 k9 = 714 k8 = 357 k7 = 178 k6 = 89 k5 = 44 k4 = 22 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 103 2 ^it U( 5 ) = 705 V( 5 ) = 1194 3 ^it U( 11 ) = 926 V( 11 ) = 581 4 ^it U( 22 ) = 27 V( 22 ) = 1218 5 ^it U( 44 ) = 65 V( 44 ) = 892 6 ^it U( 89 ) = 582 V( 89 ) = 726 7 ^it U( 178 ) = 140 V( 178 ) = 597 8 ^it U( 357 ) = 0 V( 357 ) = 885 9 ^it U( 714 ) = 0 V( 714 ) = 1328 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-47 (mod 1427 ) SONO z1 = 664 z2 = 763 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 309 che (z2^2 - Q) p = 408 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

15

ESEMPIO n3

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q-4407 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p5987 k11 = 2994 k10 = 1497 k9 = 748 k8 = 374 k7 = 187 k6 = 93 k5 = 46 k4 = 23 k3 = 11 k2 = 5 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 2 1 ^it U( 2 ) = 2 V( 2 ) = 2831 2 ^it U( 5 ) = 4825 V( 5 ) = 899 3 ^it U( 11 ) = 4357 V( 11 ) = 630 4 ^it U( 23 ) = 1772 V( 23 ) = 5648 5 ^it U( 46 ) = 3979 V( 46 ) = 1641 6 ^it U( 93 ) = 2522 V( 93 ) = 1163 7 ^it U( 187 ) = 4061 V( 187 ) = 2906 8 ^it U( 374 ) = 889 V( 374 ) = 5782 9 ^it U( 748 ) = 3352 V( 748 ) = 2952 10 ^it U( 1497 ) = 4104 V( 1497 ) = 0 11 ^it U( 2994 ) = 0 V( 2994 ) = 2667 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-4407 (mod 5987 ) SONO z1 = 4327 z2 = 1660 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 3128 che (z2^2 - Q) p = 461 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

16

ESEMPIO n4

Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q -135908789013753 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p146009 k16 = 73005 k15 = 36502 k14 = 18251 k13 = 9125 k12 = 4562 k11 = 2281 k10 = 1140 k9 = 570 k8 = 285 k7 = 142 k6 = 71 k5 = 35 k4 = 17 k3 = 8 k2 = 4 k1 = 2 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 3 1 ^it U( 2 ) = 3 V( 2 ) = 124258 2 ^it U( 4 ) = 80756 V( 4 ) = 114639 3 ^it U( 8 ) = 86439 V( 8 ) = 40381 4 ^it U( 17 ) = 8410 V( 17 ) = 67256 5 ^it U( 35 ) = 130592 V( 35 ) = 26979 6 ^it U( 71 ) = 11630 V( 71 ) = 75963 7 ^it U( 142 ) = 95240 V( 142 ) = 66724 8 ^it U( 285 ) = 127491 V( 285 ) = 46260 9 ^it U( 570 ) = 138132 V( 570 ) = 83220 10 ^it U( 1140 ) = 56470 V( 1140 ) = 138611 11 ^it U( 2281 ) = 76684 V( 2281 ) = 142727 12 ^it U( 4562 ) = 42628 V( 4562 ) = 102344 13 ^it U( 9125 ) = 1845 V( 9125 ) = 39670 14 ^it U( 18251 ) = 71908 V( 18251 ) = 98068 15 ^it U( 36502 ) = 77071 V( 36502 ) = 11814 16 ^it U( 73005 ) = 0 V( 73005 ) = 3064 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2=-135908789013753 (mod 146009 ) SONO z1 = 1532 z2 = 144477 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p = 930824753 che (z2^2 - Q) p = 930967698 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

17

ESEMPIO n5 Risoluzione della Congruenza z^2 = Q (mod p) introdurre Q 914013289024689 accertarsi che il numero che si introduce ora sia primo introdurre il numero primo p 7239913 k21 = 3619957 k20 = 1809978 k19 = 904989 k18 = 452494 k17 = 226247 k16 = 113123 k15 = 56561 k14 = 28280 k13 = 14140 k12 = 7070 k11 = 3535 k10 = 1767 k9 = 883 k8 = 441 k7 = 220 k6 = 110 k5 = 55 k4 = 27 k3 = 13 k2 = 6 k1 = 3 k0 = 1 per proseguire premere un tasto qualsiasi VALORI INIZIALI U = 1 V = 7 1 ^it U( 3 ) = 3814471 V( 3 ) = 464162 2 ^it U( 6 ) = 4524239 V( 6 ) = 1389276 3 ^it U( 13 ) = 6466284 V( 13 ) = 103638 4 ^it U( 27 ) = 2137331 V( 27 ) = 3586080 5 ^it U( 55 ) = 755672 V( 55 ) = 269387 6 ^it U( 110 ) = 3579243 V( 110 ) = 3500618 7 ^it U( 220 ) = 2516375 V( 220 ) = 2085313 8 ^it U( 441 ) = 5800394 V( 441 ) = 3125255 9 ^it U( 883 ) = 4345372 V( 883 ) = 3408966 10 ^it U( 1767 ) = 5471662 V( 1767 ) = 3490450 11 ^it U( 3535 ) = 4073939 V( 3535 ) = 6599295 12 ^it U( 7070 ) = 5183938 V( 7070 ) = 1258726 13 ^it U( 14140 ) = 4953913 V( 14140 ) = 1262034 14 ^it U( 28280 ) = 1487631 V( 28280 ) = 1036035 15 ^it U( 56561 ) = 1023334 V( 56561 ) = 5969623 16 ^it U( 113123 ) = 3705203 V( 113123 ) = 2810699 17 ^it U( 226247 ) = 6798603 V( 226247 ) = 6327610 18 ^it U( 452494 ) = 4114913 V( 452494 ) = 2135604 19 ^it U( 904989 ) = 3135477 V( 904989 ) = 3141538 20 ^it U( 1809978 ) = 7190867 V( 1809978 ) = 1863257 21 ^it U( 3619957 ) = 0 V( 3619957 ) = 574338 ------------------------------------------------------------- LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= 914013289024689 (mod 7239913 ) SONO z1 = 287169 z2 = 6952744 ------------------------------------------------------------- VERIFICA poicheacute sia (z1^2 - Q) p =-126235056 che (z2^2 - Q) p =-119569481 risultano essere degli INTERI i valori z1 e z2 trovati per z sono VALIDI

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

18

Tabella relativa ad alcuni esempi di risoluzione di z 2 equiv Q (mod p)

Valori numerici

Ndeg cifre Tal Tes

Q 1234 5678987 11

p 9 4868303 8

z 1z = 4 6961696 2z = 4 7906607 8

lt001 secondi

31 secondi

Q 3465323 0000231 3204656 7899794 2316565 5600026 4979897 7911667 56

p 7298015 4723001 14

z 1z z1 = 4576024 3608133 2z = 272199 1114868 14

lt001 secondi

218 giorni

Q ndash 59 2

p 98 4613264 9597661 16

z 1z = 47 0977190 8548802 2z = 51 3636074 1048859 16

lt001 secondi

95 anni

Q 135 6468976 0313204 0073134 24

p 761308 0239056 7640351 20

z 1z = 1313410 4575006 5861495 2z = 447897 5664050 1778856 20

001 secondi

gt640000 anni

Q ndash 28890 4

p 51326 7900321 6467789 4310543 26

1z 5294 3168489 4447109 1951430 25

2z 46032 4731832 2020680 2359113 26

001 secondi

Q 8 7654321 2345678 9111111 1111111 1111111 1111111 1111111 1111171 57

p 53 1691198 3139663 5054502 8629640 3542017 37

1z 15 5917346 8298253 8785402 6207757 2823122 37

2z 37 5773851 4841409 6269100 2421883 0718895 37

011 secondi

Q ndash 7 7733377 7222777 5557770 0077799 9777111 7774447 7766677 7888777 57

p 7777 7777777 7777777 7777777 7777777 7777777 7777700 0000000 0000009 60

1z 479 8533911 9601760 4748610 1891079 7893191 9586463 4160228 3746011 59

2z 7297 9243865 8176017 3029167 5886697 9884585 8191236 5839771 6253998 60

038 secondi

Q ndash7650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 0023132 0405373 8677677 1242564 4157897

133

p 934616 3971535 7977769 1635581 9960689 6584051 2375416 3818858 0280321 3276913 2993266 7095499 6198819 0834461 4131776 4296799 2942539 7984261

125

1z 689981 4054292 4699362 8172983 0223765 1608518 0613867 0383786 6954524 4189812 3629322 8453705 9183558 9925147 0451322 3238265 9961552 4500787

125

2z 244634 9917243 3278406 3462598 9736924 4975533 1761549 3435071 3325796 9087100 9363943 8641793 7015260 0909314 3680454 1058533 2980987 3483474

125

29 secondi

gtgt 137 miliardi

di anni

p = ( 612 + 3) 2 ndash 8 ( vedi D Shanks Solved and Unsolved Problem in Number Theory pag225 Third Edition - Chelsea Publishing Company New York 1985 ) Etagrave presunta dellrsquoUniverso

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

19

ESEMPI di risoluzione della congruenza quadratica z 2 equiv Q(mod p) con lrsquoimpiego di un apposito programma in Qbasic in cui si egrave impiegata lrsquoAritmetica a Precisione Multipla

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono q non deve essere maggiore di 256 Q =135646897603132040073134619121 ( cifre numeriche di Q 30 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 51326790032164677894310543 ( cifre di p 26 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 13 5646897 6031320 4007313 4619121 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 51326 7900321 6467789 4310543 ---------------------------------------------------------------------- j= 1 j=-1 D=P^2-4Q) J(Dp)=-1 per P = 2 z1 = 46497 2895469 9808304 7596345 z2 = p - z1 = 4829 5004851 6659484 6714198 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poicheacute il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 05859375 secondi

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 introdurre Q e quindi premere tasto invio 4534454763870890054258906331135477685 2334576452344634569 ( cifre numeriche di Q 56 ) le cifre che compongono p non devono essere superiori a 125 accertarsi inoltre preventivamente che p sia primo p = 5316911983139663505450286296403542017 ( cifre di p 37 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 4534454 7638708 9005425 8906331 1354776 8523345 7645234 4634569 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 53 1691198 3139663 5054502 8629640 3542017 ---------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 1 z1 = 25 8457755 8909131 7019925 9334816 2908113 z2 = p - z1 = 27 3233442 4230531 8034576 9294824 633904 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 109375 secondi

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

20

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =12345678987 ( cifre numeriche di Q 11 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo introdurre p e premere quindi tasto invio p = 72980154723001 ( cifre di p 14 ) ---------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = 1234 5678987 ---------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 7298015 4723001 ---------------------------------------------------------------------- la congruenza non egrave risolubile

CALCOLO DEI VALORI CHE SODDISFANO LA CONGRUENZA z^2 = Q (mod p) il numero di cifre che compongono Q non deve essere maggiore di 256 Q =-4650102343507240213204567879947457646440021042554163818858028321465313200201 323465676897974466430000231320405373867767712425644157897 ( cifre numeriche di Q 133 ) le cifre che compongono p non devono essere superiori a 125 inoltre accertarsi prima di introdurlo che p sia primo p = 1234567890123456789012345678901234567890123456789012345678901234567890123456 789012345678901234567890123456789479 ( cifre di p 112 ) ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante Q in numero in Base 10^ 7 Q = - 4650102 3435072 4021320 4567879 9474576 4644002 1042554 1638188 5802832 1465313 2002013 2346567 6897974 4664300 23132 405373 8677677 1242564 4157897 ------------------------------------------------------------------------------------------------------- trasformazione della stringa rappresentante p in numero in Base 10^ 7 p = 1234567 8901234 5678901 2345678 9012345 6789012 3456789 123456 7890123 4567890 1234567 8901234 5678901 2345678 9012345 6789479 ------------------------------------------------------------------------------------------------------- D=P^2-4Q) J(Dp)=-1 per P = 3 z1 = 1014897 3418285 9321816 4268019 1710912 7936229 9912701 1935856 6133404 8116736 4624180 8232995 5880411 649928 6334414 4622692 z2 = p - z1 = 219670 5482948 6357084 8077659 7301432 8852782 3544087 8187600 1756718 6451153 6610387 668238 9798490 1695750 2677931 2166787 ----------------------------------------------------------- U[(p + 1) 2] = 0 Poichegrave il valore di U di indice k=(p+1)2 egrave uguale a 0 i valori trovati z1 e z2 sono le soluzioni cercate della congruenza z^2 = Q (mod p) tempo impiegato 176 secondi

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

21

Allegato 1 REM Algoritmo per RISOLVERE LA CONGRUENZA z^2 = Q (mod p)con lausilio del REM calcolo veloce del valore numerico di V(k) relativo alla Sequenza di REM Lucas avente un dato P ed un dato Q REM Detta sequenza Š una successione di numeri i cui primi due V(0) e V(1) REM hanno i seguenti valori V(0)=2 V(1)= P ed il cui termine generico V(n) REM Š dato dalla seguente formula V(n) = PV(n-1) - QV(n-2) REM Per un numero primo p si DIMOSTRA che la congruenza z^2 Q (mod p) REM ammesso che sia risolvibile ha per soluzione il valore z = V(k)2 o REM z=[(p-V(y)]2 per V(k) dispari dove k=(p+1)2 se P Š scelto in modo REM che il valore D = P^2-4Q sia un non residuo quadratico di p REM ------------------------------------------------------------------------ REM Occorre innanzitutto vedere se la congruenza z^2 = Q(mod p) ha soluzioni REM a tal fine Q deve essere residuo quadratico di p per vedere cibull si REM calcola il simbolo di Jacobi(Qp) e solo se esso ha valore +1 la REM congruenza ha soluzioni si prosegue andando a calcolare un valore REM minimo per P tale per cui risulti D = P^2 - 4 Q non residuo quadratico REM di p vale a dire il simbolo di JACOBI (Dp) deve avere valore -1 REM Una volta constatato che la congruenza Š risolvibile e calcolato REM il valore appropriato di P si deve trovare un numero INT(LOG(k) log2) REM di indici opportuni da assegnare a U(k) ed a V(k) necessari per il calcolo REM veloce di V(k) tramite la seguente procedura REM iniziando dallindice k =(p+1)2 se lindice k Š di valore pari si REM calcola k1 = k2 se lindice k Š di valore dispari si calcola REM k1 = (k+1) 2 si procede ulteriormente con k1 come fatto per k e cos REM facendo si prosegue sino ad arrivare allindice di valore 1 REM Il valore di Q non deve essere maggiore di 10^15 e quello di p non deve REM avere pimdash di 7 cifre per avere dei risultati esattiin quanto in questo REM programma non si va oltre la doppia precisione nei calcoli effettuati REM ----------------------------------------------------------------------- CLS DEFDBL A-Z DIM a(100) b(100) c(100) x(100) m(100) y(100) i$(100) r$(100) cf(100) PRINT Risoluzione della Congruenza z^2 = Q (mod p) PRINT 5 INPUT introdurre Q Q IF Q gt 10 ^ 15 THEN PRINT Introdurre un Q piu piccolo GOTO 5 PRINT accertarsi che il numero che si introduce ora sia primo 15 INPUT introdurre il numero p np rd = INT(SQR(np)) FOR h = 3 TO rd STEP 2 pp = np h IF pp = INT(pp) GOTO nonpr NEXT h PRINT essendo il numero p introdotto primo si pubull proseguire GOTO pros nonpr PRINT il numero introdotto non Š primo GOTO 15 pros IF np gt SQR(9 10 ^ 15) THEN PRINT valore troppo altointrodurre IF np gt SQR(9 10 ^ 15) THEN PRINT un numero primo piu basso GOTO 15 t1 = TIMER REM ------------------------------------------------------------------------ REM CALCOLO DEL SIMBOLO DI JACOBI(+-10) di J = (Qnp) IF Q 2 = INT(Q 2) AND np 2 = INT(np 2) THEN PRINT J = 0 END qj = Q settare pj = np dj = 1 sj = 1 bj = 0 s1j = 1 s2j = 1 smj = 1 p1j = 0 p2j = 0 r = 0 r2 = 0 inizioj r = qj - INT(qj pj) pj PRINT qj pj r IF pj = 1 GOTO risol IF pj gt 1 AND r = 0 AND pp = 1 THEN PRINT ++J = 0 qj GOTO cercarnr IF pj gt 1 AND r = 0 THEN PRINT PRINT ++J = 0 END r2 = r 2 IF r2 = INT(r2) GOTO 40 IF r2 ltgt INT(r2) GOTO erre1 40 r2 = r 2 IF r2 ltgt INT(r2) GOTO 50 r = r 2 bj = bj + 1

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

22

GOTO 40 50 p2j = (pj ^ 2 - 1) 16 IF p2j ltgt INT(p2j) AND bj 2 ltgt INT(bj 2) THEN smj = -1 erre1 IF r gt pj GOTO 60 r1 = (r - 1) 4 p1j = (pj - 1) 4 IF r1 = INT(r1) OR p1j = INT(p1j) THEN s2j = 1 GOTO 60 s1j = -1 60 sj = sj s2j s1j smj s1j = 1 smj = 1 bj = 0 smj = 1 bj = 0 70 qj = pj pj = r IF r = 0 THEN END GOTO inizioj risol IF sj = -1 AND nr = 0 THEN PRINT la congruenza NON Š RISOLVIBILE END IF sj = 1 AND nr = 0 GOTO cercarnr IF sj = 1 AND nr = 2 THEN nr = 3 qj = nr GOTO settare IF sj = -1 AND qj gt 0 GOTO continua cercarnr Px = Px + 1 pp = 1 PRINT Px = Px qj = Px ^ 2 - 4 Q nr = qj PRINT qj = qj DO y$ = INKEY$ LOOP WHILE y$ = GOTO settare continua p1 = np p = Px D = p ^ 2 - 4 Q DD = D printP=PD= IF p gt np THEN p = p - INT(p np) np IF ABS(D) gt np THEN D = D - INT(D np) np PRINT il numero D=P^2-4Q = D risulta essere il pimdash piccolo non PRINT residuo quadratico di np PRINT p1 p Q D DD PRINT --------------------------------------------------------------------- DO y$ = INKEY$ LOOP WHILE y$ = n = -1 x = np + 1 x(0) = x IF x = INT(x 2) 2 THEN a(0) = 0 PRINT 0 a(0) x IF x ltgt INT(x 2) 2 THEN a(0) = 1 PRINT 0 a(0) x 105 x = INT(x 2) n = n + 1 IF x = INT(x 2) 2 THEN a(n) = 0 x(n) = x PRINT n a(n) x(n) IF x ltgt INT(x 2) 2 THEN a(n) = 1 x(n) = x PRINT n a(n) x(n) IF x = 1 THEN ns = n GOTO 20 PRINT n= n PRINT ns= ns GOTO 20 GOTO 105 20 k$ = STR$(k) PRINT k$ = k$ FOR h = 0 TO n i$(n - h) = STR$(n - h) NEXT h 20 PRINT FOR h = 0 TO n PRINT k n - h = x(h) NEXT h 20 FOR h = 0 TO n cf(h) = LEN(i$(h)) - 1 r$(h) = RIGHT$(i$(h) cf(h)) NEXT h PRINT FOR h = 0 TO n PRINT k + r$(n - h) = x(h) NEXT h PRINT per continuare premere un tasto qualsiasi DO y$ = INKEY$ LOOP WHILE y$ = U = 1 V = Px FOR k = 0 TO ns b(k) = a(n - k) y(k) = x(n - k) NEXT k FOR k = 0 TO ns a(k) = b(k) x(k) = y(k) NEXT k FOR k = ns TO 0 STEP -1 PRINT k b(k) y(k) NEXT k PRINT PRINT VALORI INIZIALI U = 1 V = Px PRINT DO Y$ = INKEY$ LOOP WHILE Y$ = REM ===================== inizio loop principale ========================== Qi = Q Q0 = ABS(Q) IF Q lt 0 THEN m$ = - IF Q lt 0 THEN Q = -Q FOR k = 1 TO ns it = it + 1 PRINT it ^it IF ABS(Q) lt np AND k = 1 GOTO duequ IF ABS(Q) gt np AND k = 1 THEN Q0 = Q0 - INT(Q0 np) np IF ABS(Q) gt np AND k = 1 THEN Q = Q0 GOTO duequ Q = Q - INT(Q np) np quadrato Q = Q Q PRINT QQ = Q Q = Q - INT(Q np) np PRINT rQQ = Q IF x(k - 1) 2 = INT(x(k - 1) 2) GOTO duequ Q = Q Q0 PRINT QQQ0 = Q Q = Q - INT(Q np) np PRINT res QQQ0 = Q res Q = Q - INT(Q np) np PRINT res di Q = Q duequ q2 = 2 ABS(Q) PRINT q2 = q2

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END

23

Rn = q2 - INT(q2 np) np PRINT Rn di q2 = Rn Rp = np - Rn IF a(k - 1) = 1 AND m$ = - THEN Rp = Rn IF X(k - 1) 2 ltgt INT(X(k - 1) 2) AND m$ = - THEN Rp = Rn squdue PRINT Rp di q2 = Rp x = U V IF x gt np THEN x = x - INT(x np) np PRINT +++++ X= X y = V ^ 2 + Rp IF y gt np THEN y = y - INT(y np) np PRINT +++++ Y= Y U = x V = y IF U = np THEN U = 0 IF a(k) = 1 GOTO akappa1 IF a(k) = 0 THEN PRINT it ^it a( k )= a(k) U = X V = y IF a(k) = 0 THEN PRINT it ^it TAB(15) U( x(k) ) = x TAB(45) V( x(k) ) = y IF a(k) = 0 GOTO nekk1 DO y$ = INKEY$ LOOP WHILE y$ = akappa1 PRINT ======================== a(k)=1 ====================== PRINT it ^it a( k )= a(k) REM 2 U = P X + Y U2 = p x + y IF U2 ltgt INT(U2 2) 2 THEN U = (np + U2) 2 IF U2 = INT(U2 2) 2 THEN U = U2 2 IF U gt= np THEN U = U - INT(U np) np IF D lt 0 THEN D = D - INT(D np) np PRINT D= D REM 2 V = P Y + D X V2 = p y + D x PRINT 2V = V2 IF V2 ltgt INT(V2 2) 2 THEN V = (np + V2) 2 IF V2 = INT(V2 2) 2 THEN V = V2 2 IF V gt np THEN V = V - INT(V np) np PRINT it ^it TAB(15) U( x(k) ) = U TAB(45) V( x(k) ) = V nekk1 IF k = 0 GOTO zeta NEXT k zeta z = V 2 IF z = INT(V 2) THEN za = z zb = np - za IF z ltgt INT(V 2) THEN za = (np - V) 2 za = np - za zb = np - za REM zb = (np + V) 2 quz PRINT ------------------------------------------------------------- PRINT PRINT LE DUE SOLUZIONI z1 e z2 DELLA CONGRUENZA z^2= Qi (mod np ) PRINT SONO PRINT PRINT z1 = za z2 = zb PRINT il loop Š composto da it iterazioni PRINT PRINT ------------------------------------------------------------- PRINT VERIFICA Pz1 = (za za - Qi) np Pz2 = (zb zb - Qi) np IF Pz1 = INT(Pz1) AND Pz2 = INT(Pz2) GOTO 123 PRINT i valori z1 e z2 trovati per z NON sono VALIDI END 123 PRINT poichsbquo sia (z1^2 - Q) p = Pz1 PRINT che (z2^2 - Q) p = Pz2 risultano essere degli INTERI PRINT i valori z1 e z2 trovati per z sono VALIDI GOTO tempo tempo PRINT t2 = TIMER - t1 PRINT tempo di calcolo t2 secondi END


Recommended