# Congruenze esponenziali ###### tags: `md` #### Piccolo teorema di Fermat ###### <span style="color: #0288d1">Teorema</span> Se $p$ è un numero primo e $a$ è un numero intero che non è un multiplo di $p$, allora vale $$ a^{p−1} \equiv 1 \; (p) $$ ###### Dimostrazione Dato un intero $a\not\equiv 0 \;(p)$ consideriamo i numeri $$ a,2a,...,(p−1)a $$ Questi $p−1$ numeri sono a due a due non congrui fra loro modulo $p$. Supponiamo infatti, per assurdo, che esistano $i$ e $j$ con $(0\le i < j\le p−1)$ tali che $ia\equiv ja\;(p)$ Ora sappiamo che $a$ ammette un inverso modulo $p$. Sia dunque $b$ un inverso di $a$. Moltiplicando per $b$ otteniamo: $$ iab\equiv jab\;(p) $$ ossia $$ i\equiv j \; (p) $$ Poiché avevamo supposto $0\le i < j\le p−1$ abbiamo trovato un assurdo. Dunque la lista $a,2a,...,(p−1)a$ comprende $p−1$ numeri i cui resti nella divisione per $p$ sono tutti diversi da $0$ e a due a due distinti. Allora i resti dei numeri $a,2a,...,(p−1)a$ sono esattamente, a meno di riordinarli, i numeri: $1,2,\ldots,(p−1)$ Possiamo dunque scrivere che $$ a\cdot(2a)\cdot(3a)\cdots((p−1)a)\equiv1\cdot2\cdot3\cdots(p−1)\;\;(p) $$ Questa congruenza, raccogliendo a sinistra i fattori uguali ad $a$, equivale alla seguente: $$ a^{p−1}\cdot1\cdot2\cdot3\cdots(p−1)\equiv1\cdot2\cdot3\cdots(p−1)\;\;(p) $$ Ora osserviamo che p−1 è invertibile modulo $p$ e moltiplichiamo entrambi i membri per un suo inverso. Otteniamo $$ a^{p−1}\cdot1\cdot2\cdot3\cdots(p−2)\equiv1\cdot2\cdot3\cdots(p−2)\;\;(p) $$ Poi moltiplichiamo entrambi i membri per un inverso di $p−2$, e così via. Alla fine troviamo $$ a^{p−1}\equiv1\;(p) $$ come volevamo dimostrare. ###### Dimostrazione Diamo adesso una diversa dimostrazione del piccolo teorema di Fermat dovuta ad Eulero. Per prima cosa dimostriamo che $p$ divide ${p\choose i}$ quando $0< i < p$. Infatti sappiamo che $$ {p\choose i}i! (p−i)! =p! $$ e, per il teorema di decomposizione unica in prodotto di fattori primi, $p$, che divide il membro di destra, deve dividere il membro di sinistra. Poiché $p$ non può dividere $i! (p−i)!$ (che sono prodotti di numeri positivi strettamente minori di $p$) possiamo dedurre, per la proprietà caratterizzante dei numeri primi (ossia quella che dice che se $p$ è primo e divide un prodotto $ab$ allora $p$ deve dividere $a$ o $p$ deve dividere $b$), che $p$ deve dividere ${p\choose i}$. A questo punto possiamo osservare che, dati due numeri interi $a$ e $b$, lo sviluppo del binomio $(a+b)^p$ ha, modulo $p$, una scrittura molto semplificata. Infatti vale $$ (a+b)^p=\sum^p_{i=0}{p\choose i}a^ib^{p−i}\equiv a^p+b^p\;(p) $$ dato che, appunto, $p$ divide tutti i coefficienti ${p\choose i} \text{ con } (0< i < p)$. In particolare, nel caso $b= 1$, abbiamo $$ (a+ 1)^p\equiv a^p+ 1\;\;(p) $$ Ora proviamo che, per ogni $a\in\mathbb{Z}$ vale $a^p\equiv a(p)$ Questa relazione, nel caso in cui $a$ non è multiplo di $p$, ci dà (dividendo per $a$) l'enunciato del teorema. Ci basta dimostrare che, per ogni $a\in\mathbb{N}$, $$ a^p\equiv a\;(p)​ $$ (il caso dei numeri negativi si ricava poi immediatamente). Lo dimostriamo per induzione su $a$. Il caso base, per $a= 0$, $$ 0^p≡0 \;(p) $$ è banale. Supponiamo ora che questa relazione sia vera fino ad $a=n$ e proviamo a dimostrare che $$ (n+ 1)^p\equiv n+ 1 \; (p) $$ (se ci riusciamo la nostra dimostrazione è terminata). Ora, per quanto visto sopra possiamo scrivere che $$ (n+ 1)^p\equiv n^p+ 1 (p) $$ Ma, per ipotesi induttiva, $n^p≡n\;(p)$ per cui $$ (n+ 1)^p\equiv n+ 1 \; (p) $$ ###### <span style="color: #388e3c">Corollario</span> Se $p$ è un numero primo, per ogni numero intero a vale $$ a^p \equiv a \;(p) $$ ###### Dimostrazione Se $a$ non è multiplo di $p$ per il piccolo teorema di Fermat vale $$ a^{p−1}≡1 \;(p) $$ da cui si ottiene la tesi moltiplicando per $a$ entrambi i membri. È poi immediato verificare che se $a≡0 \;(p)$ allora la tesi è vera. ###### <span style="color: #388e3c">Corollario</span> Se $n > 1$ è un numero intero tale che per qualche numero intero $a$ vale $$ a^n \not\equiv a \;(n) $$ allora $n$ non è primo. ###### Dimostrazione Si tratta della contronominale del corollario precedente. È interessante capire se con questi ragionamenti si può trovare un criterio per dire con certezza se un numero è primo (non solo per dire se un numero NON è primo). Saremmo infatti tentati di pensare che se prendiamo un numero intero $n >1$ e scopriamo che per tutti i numeri interi $a$ vale $$ a^n\equiv a\;(n) $$ allora $n$ è primo. Questo NON è vero: ci sono infiniti numeri che soddisfano questa proprietà ma non sono primi. #### Classi di resto ###### <span style="color: #ce93d8">Notazione</span> Per $i = 0,1,2,3,4,5,6,7,8,9$, chiamiamo $[i]_{10}$ l'insieme dei numeri interi la cui divisione per 10 dà resto $i$. $$ [i]_{10} = \{x \in \mathbb{Z} \;\;|\;\; x \equiv i \;(10)\} $$ Chiamiamo ora $\mathbb{Z}_{10}$ l'insieme i cui elementi sono tutte le classi di resto modulo $10$: $\mathbb{Z}_{10} = \{[0]_{10},[1]_{10},\ldots,[9]_{10}\}$ Ci mettiamo d'accordo di poter indicare una classe di resto $[i]_{10}$ anche col simbolo $[s]_{10}$ dove $s$ è un qualunque numero intero tale che $s \equiv i \;(10)$ Per esempio, $[127]_{10} = [7]_{10}$ Caso generale Sia $m$ un numero intero positivo. Per ogni $i = 0,1,2,...,m−1$ chiamiamo $[i]_m$ la "classe di resto di i modulo $m$", ossia l'insieme dei numeri che danno resto $i$ quando si considera la loro divisione euclidea per $m$: $$ [i]_m = {x \in \mathbb{Z} \;\;|\;\; x \equiv i \;(m)} $$ Chiamiamo $\mathbb{Z}_m$ l'insieme di tutte le classi di resto modulo $m$: $$ \mathbb{Z}_m = {[0]_m,[1]_m,...,[m−1]_m} $$ Si tratta dunque un insieme di cardinalità $m$. Come sopra adottiamo la convenzione per cui possiamo indicare la classe $[i]_m$ anche col simbolo $[s]_m$ dove $s$ è un qualunque numero intero tale che $s \equiv i \; (m)$ ###### <span style="color: #e53935">Definizione</span> Ora siamo pronti a definire la somma e la moltiplicazione di elementi di $\mathbb{Z}_{10}$. Poniamo: $$ [a]_{10} \cdot [b]_{10} = [ab]_{10} \\ [a]_{10} + [b]_{10} = [a+b]_{10} $$ Per esempio: $$ [7]_{10}\cdot [5]_{10}= [35]_{10}= [5]_{10} \\ [6]_{10}+ [8]_{10}= [14]_{10}= [4]_{10} $$ Caso generale Possiamo allora definire la somma e la moltiplicazione di elementi di $\mathbb{Z}_m$: $$ [a]_m \cdot [b]_m = [ab]_m \\ [a]_m + [b]_m = [a+b]_m $$ #### Applicazione RSA Consideriamo due numeri primi distinti $p$ e $q$, e prendiamo un numero $e$ che sia primo con $(p−1)(q−1)$. Sappiamo dunque che $e$ è invertibile modulo $(p−1)(q−1)$, e chiamiamo $d$ un suo inverso. La seguente semplice proposizione è il cuore del metodo di crittografia che vogliamo descrivere: ###### <span style="color: #64b5f6">Proposizione</span> Dati $p,q,e,d$ come sopra, per ogni numero $m$ con $0 \le m < pq$ vale $$ (m^e)^d ≡ m \; (pq) $$ ###### Dimostrazione Osserviamo che per il teorema cinese del resto l'equazione $$ x\equiv m\;(pq) $$ è equivalente al sistema $$ \begin{cases} x\equiv m\;(p)\\ x\equiv m\;(q) \end{cases} $$ Dunque ci basta dimostrare che $(m^e)^d$ è una soluzione del sistema. Verifichiamo che $(m^e)^d$ è soluzione della prima equazione (per la seconda equazione si procederà in maniera del tutto analoga), ossia verifichiamo che è vera la congruenza: $$ (m^e)^d\equiv m\;(p) $$ Ora, se $p|m$ la congruenza appena scritta diventa $0\equiv 0 \; (p)$ che è vera. Se invece $p\not|\;m$ allora possiamo applicare il piccolo teorema di Fermat. Infatti per costruzione $$ ed\equiv 1\;((p−1)(q−1)) $$ dunque possiamo scrivere $$ ed= 1 +k(p−1)(q−1) $$ per un certo intero $k$. Allora $$ (m^e)^d=m^{ed}=m^{1+k(p−1)(q−1)}=m\cdot(m^{p−1})^{k(q−1)}\equiv \\ m\cdot 1^{k(q−1)}\equiv m\;(p) $$ dove abbiamo usato il piccolo teorema di Fermat per dire che $m^{p−1}\equiv 1 \; (p)$.