# Pseudoprimo

In matematica, 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
### Definizione

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 $a=2$ è il $341=11\cdot 31$. Quando un numero è pseudoprimo sotto tutte le basi, cioè qualunque sia il valore di $a$, prende il nome di numero di Carmichael.

### Proprietà

Sia $s>1$ un intero dispari non primo, allora valgono le seguenti proprietà:
* 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$.
* 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:
* 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 è congruo a $1$ modulo $s$). Per la seconda, anche $a_{2}^{-1}$ sta in $\mathbb {Z} _{s}^{*}$ ed ha come ordine un divisore di $s-1$, infatti $1=(a_{2}^{-1})^{s-1}a_{2}^{s-1}\equiv (a_{2}^{-1})^{s-1}\cdot 1=(a_{2}^{-1})^{s-1}$. Quindi, $s$ è pseudoprimo sia in base $a_{1}a_{2}$, sia in base $a_{1}a_{2}^{-1}$.
* 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=abb^{-1}$ apparterrebbe ad $A$). Si ha, dunque, un'applicazione iniettiva $\varphi \colon b\in A\to \mathbb {Z} _{s}^{*}\setminus A$. Dunque, l'ordine di $P$ non supera l'ordine di $\mathbb {Z} _{s}^{*}\setminus A$.

### Esempi e curiosità

Il più piccolo pseudoprimo (di Fermat) in base $2$ è $341$. Sappiamo che $341=11\cdot 31$, quindi $341$ non è primo, ma esso soddisfa il piccolo teorema di Fermat, ossia
    $2^{340}\equiv 1{\pmod {341}}.$
Un numero pseudoprimo in base $3$ e non in base $2$ è $91$, e sappiamo che $91=7\cdot 13$.
I numeri pseudoprimi in base $2$ si dicono numeri di Poulet o numeri di Sarrus 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

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 $MCD(n,b)=1$. Il numero $n$ è uno pseudoprimo di Eulero in base $b$ se
    $b^{(n-1)/2}\equiv \pm 1{\pmod {n}}.$

## Utilizzo

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, $\alpha =1/2$ per i compositi non di Carmichael per il test di Fermat; $\alpha =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}$