Pseudoprimo

Da Wikipedia, l'enciclopedia libera.

Un numero pseudoprimo è un numero che, pur non essendo primo, soddisfa alcune proprietà forti che devono essere necessariamente soddisfatte dai primi, ovvero rispetto a una serie di test si comporta analogamente ad un numero primo. La definizione di numero pseudoprimo dipende quindi dal contesto, e da cosa si intende per "comportarsi come un numero primo".

I numeri pseudoprimi appaiono spesso come output di algoritmi che ricercano numeri primi, usando alcune proprietà forti che questi devono soddisfare.

Pseudoprimo di Fermat[modifica | modifica sorgente]

Definizione[modifica | modifica sorgente]

Alcuni teoremi, come il piccolo teorema di Fermat

a^N\equiv a \pmod{N}

sono validi per ogni N primo, e per ogni a. In questo contesto, un numero N è detto pseudoprimo di Fermat rispetto ad a se vale la relazione enunciata dal piccolo teorema di Fermat. Un numero che è pseudoprimo rispetto ad ogni a coprimo con N è un numero di Carmichael (affinché la relazione si verifichi, è necessario che a sia coprimo con N).

Il più piccolo numero pseudoprimo con base  N = 2 è il 341 (11×31). Quando un numero è pseudoprimo sotto tutte le basi, cioè qualunque sia il valore di a, prende il nome di numero di Carmichael.

Proprietà[modifica | modifica sorgente]

Sia s>1 un intero dispari non primo, allora valgono le seguenti proprietà:

  1. Se s è pseudoprimo nelle basi a_1 ed a_2, tali che MCD(a_1, s)=1 e MCD(a_2, s)=1, allora s è pseudoprimo nelle basi a_1*a_2 e a_1*(a_2)^{-1}, dove (a_2)^{-1} è l’inverso di a_2 modulo s.
  2. Se esiste un intero a, con 1<a<s e MCD(a,s)=1, tale che s non è uno pseudoprimo in base a, allora s non è uno pseudoprimo in base b per almeno metà dei b tali che 1<b<s e MCD(b, s)=1.

Dimostriamo le proprietà precedenti:

  1. Se valgono MCD(a_1, s)=1 e MCD(a_2, s)=1, allora MCD(a_1*a_2, s)=1 e MCD(a_1* (a_2)^{-1}, s)=1, poiché a_1, a_2, a_1*a_2, a_1*(a_2)^{-1} appartengono tutti al gruppo di (\mathbb{Z}_s^{*}), ossia al gruppo degli elementi invertibili di \mathbb{Z}_s. Dobbiamo vedere quali risultati danno (a_1*a_2)^{s-1} e (a_1*((a_2)^{-1}))^{s-1}. Partiamo dal primo. Sapendo che sia a_1 sta in (\mathbb{Z}_s^{*}) sia a_2 sta in (\mathbb{Z}_s^{*}) e che il loro ordine è un divisore di (s-1), possiamo concludere che la composizione dei due abbia anch’essa come ordine un divisore di (s-1), e, quindi, elevata ad (s-1) dia l’unità del gruppo (\mathbb{Z}_s^{*}) (ossia ≡ 1 (mod s)). Per la seconda, anche (a_2)^{-1} sta in (\mathbb{Z}_s^{*}) ed ha come ordine un divisore di (s-1) (( 1 = (a_2)^{-1})^{s-1}*(a_2)^{s-1}((a_2)^{-1})^{s-1}*1 = ((a_2)^{-1})^{s-1}).
    Quindi, s è pseudoprimo sia in base a_1*a_2, sia in base a_1*(a_2)^{-1}.
  2. Consideriamo come a un elemento di (\mathbb{Z}_s^{*}). Sia A il sottoinsieme di (\mathbb{Z}_s^{*}) costituito dalle classi il cui resto b modulo s è tale che n è pseudoprimo in base b. Per (1), vale che, se b sta in A, allora ab non sta in A (altrimenti a=(ab)*(b)^{-1} apparterrebbe ad A). Si ha, dunque, un’applicazione iniettiva φ: b in A → (\mathbb{Z}_s^{*})\A. Dunque, l’ordine di P non supera l’ordine di (\mathbb{Z}_s^{*})\A.

Esempi e curiosità[modifica | modifica sorgente]

Il più piccolo pseudoprimo (di Fermat) in base 2 è 341. Sappiamo che 341=11*31, quindi 341 non è primo, ma esso soddisfa il Piccolo teorema di Fermat, ossia (2)^{340} ≡ 1 (mod 341). Un numero pseudoprimo in base 3 e non in base 2 è 91, e sappiamo che 91=7*13.
I numeri pseudoprimi in base 2 si dicono numeri di Poulet o numeri di Sarro o Fermatiani.
Data una base h, vi sono infiniti pseudoprimi in quella base, ma sappiamo anche che sono molto “rarefatti” negli interi (sono infiniti, ma se si considera un qualsiasi intervallo di un milione di interi consecutivi, ne troviamo al massimo qualche centinaia).

Pseudoprimo di Eulero[modifica | modifica sorgente]

Exquisite-kfind.png Per approfondire, vedi pseudoprimo di Eulero.

Gli pseudoprimi di Eulero hanno molte somiglianze con quelli di Fermat.

Sia b un intero, e sia n un intero dispari positivo, non primo, e tale che M.C.D.(n, b)=1. Il numero n è uno pseudoprimo di Eulero in base b se

b^{(n-1)/2}\equiv \pm 1 \pmod n.

Utilizzo[modifica | modifica sorgente]

Una delle applicazioni più importanti dei numeri pseudoprimi si trova negli algoritmi di “crittografia a chiave pubblica”, uno dei tipi di crittografia più utilizzati nel nostro tempo. Un algoritmo di crittografia a chiave pubblica molto famoso che utilizza grandi numeri primi è RSA. In questi algoritmi è fondamentale generare dei numeri primi molto grandi: poiché test di primalità deterministici come quello di Agrawal-Kayal-Saxena sono lenti (per non parlare del Test di Wilson), ci si accontenta di uno pseudoprimo, cioè di un numero che con grande probabilità è primo.

Se α è la probabilità che un numero composito passi un test (ad esempio, α=1/2 per i compositi non di Carmichael per il Test di Fermat; α=1/4 per il Test di Miller-Rabin), allora la probabilità che un numero composito passi n volte il test è \alpha^n. Questo non vuol dire che un numero che passi n test sia composito con probabilità \alpha^n: per il Teorema di Bayes, considerando che la probabilità che un numero x sia primo è 1/\ln{x} e supponendo \alpha^n molto più grande di \ln{x}, abbiamo che:

La probabilità che un numero che passi n test sia composito è \ln{x}/\alpha^n


Voci correlate[modifica | modifica sorgente]