Sei sulla pagina 1di 18

Lezioni di Aritmetica Modulare

Antonino Salibra
Università Ca’Foscari Venezia
31 Ottobre 2017
Nel seguito indicheremo con Z l’insieme dei numeri interi.
Scriveremo talvolta a|b al posto di “a divide b”. Questo significa che esiste c ∈ Z tale
che b = ac. Ricordiamo che ogni numero intero divide 0.

1. Massimo comun divisore


Lemma 1.1. Dati due interi a e b con b 6= 0, esiste un’unica coppia di interi q (quoziente)
ed r (resto) tali che a = bq + r con 0 ≤ r < |b|, dove |b| è il valore assoluto di b.

Proof. Consideriamo l’insieme A = {a − bz : z ∈ Z}. Sia r il minimo elemento positivo


di A. Allora esiste q ∈ Z tale che a = bq + r. Se fosse r > |b|, allora 0 < r − |b| < r. Se
b > 0, allora a = b(q + 1) + (r − b), mentre se b < 0 allora a = b(q − 1) + (r − |b|). In ogni
caso, r non sarebbe il minimo elemento positivo di A. Contraddizione.

Example 1.1. Se a = 17 e b = −3, allora 17 = (−3)(−5) + 2. Se a = −17 e b = −3


allora −17 = (−3)6 + 1.

Se a1 , . . . , an sono interi, allora a1 Z + · · · + an Z denota l’insieme di tutti gli interi


che hanno la forma x1 a1 + · · · + xn an per opportuni x1 , . . . , xn ∈ Z. Se a ∈ Z, allora
aZ = {ka : k ∈ Z} è l’insieme dei multipli di a. L’insieme a1 Z + · · · + an Z si chiama ideale
generato da a1 , . . . , an .
Consideriamo due esempi: 2Z + 3Z = Z perché 1 = 3 − 2 e quindi un arbitrario intero
x si scrive come 3x + 2(−x), mentre lasciamo al lettore la verifica che l’ideale 4Z + 10Z è
l’insieme dei numeri pari.

Lemma 1.2. 1. a|b1 , . . . , a|bn sse b1 Z + · · · + bn Z ⊆ aZ.

2. a = ±b sse bZ = aZ.

In particolare, abbiamo:

b è un multiplo di a sse bZ ⊆ aZ

e
a divide b sse aZ ⊇ bZ

Lemma 1.3. Siano a e b numeri interi non entrambi nulli. Allora aZ + bZ = dZ, dove
d è il minimo intero positivo che appartiene all’ideale aZ + bZ.

1
Lezioni di Aritmetica Modulare 2

Proof. Da d ∈ aZ + bZ si ricava d = xa + yb per opportuni x, y ∈ Z. Quindi ogni multiplo


di d si scrive come kd = (kx)a + (ky)b, da cui si ha dZ ⊆ aZ + bZ.
Viceversa, proviamo che aZ + bZ ⊆ dZ. Sia c ∈ aZ + bZ, ossia c = za + tb per opportuni
z, t. Dividendo c per d si ottiene c = dq + r per opportuni q ed r tali che 0 ≤ r < d.
Sostituendo c = za + tb e d = xa + yb si ricava: za + tb = qxa + qyb + r. Quindi
r = (z − qx)a + (t − qy)b ∈ aZ + bZ. Siccome d è il minimo intero positivo in aZ + bZ, si
deduce r = 0 e quindi c = dq ∈ dZ.

Lemma 1.4. Siano a e b numeri interi. Allora esiste un unico numero d ≥ 0 che verifica
le seguenti proprietà:

(i) d|a e d|b;

(ii) Se c|a e c|b, allora c|d.

Se a, b sono non entrambi nulli, allora dZ = aZ + bZ.

Proof. Se a = 0 oppure b = 0, allora d = 0, perché 0 è l’unico numero intero che ammette


come divisori tutti i numeri interi. Se a, b sono non entrambi nulli, applichiamo il Lemma
1.3 per ottenere dZ = aZ + bZ. Allora, (i) segue da a, b ∈ aZ + bZ = dZ. (ii) Dall’ipotesi
c|a e c|b segue che a, b ∈ cZ e quindi dZ = aZ + bZ ⊆ cZ. Ossia c divide d.
Si noti che, se non utilizzassimo la teoria degli ideali, non sarebbe banale provare la
proprietà (ii) del precedente lemma.

Definition 1.1. Il massimo comun divisore (MCD) di a e b è il più grande divisore


comune di a e b.

Il massimo comun divisore di a e b coincide con l’unico numero determinato dal Lemma
1.4. Verrà indicato con MCD(a, b) oppure con (a, b).
Abbiamo (a, b) = (|a|, |b|), dove |a| e |b| sono il valore assoluto di a e b rispettivamente.
Dal Lemma 1.4 segue che (0, 0) = 0.
Due numeri interi a, b si dicono relativamente primi se (a, b) = 1.

Un metodo efficiente di calcolo del massimo comun divisore è l’algoritmo di Euclide.

Lemma 1.5. Siano a e b interi con b 6= 0 e sia a = bq + r con 0 ≤ r < |b|. Allora
(a, b) = (b, r).

Proof. Abbiamo per ipotesi che bZ + rZ ⊆ aZ + bZ, perché r = a − bq ∈ aZ + bZ. L’altra


inclusione aZ + bZ ⊆ bZ + rZ vale, perché a = bq + r. Allora, applicando il Lemma 1.4 si
ottiene la conclusione: (b, r)Z = bZ + rZ = aZ + bZ = (a, b)Z.

Euclide(int a, int b) : int


{int r;
while (b 6= 0) do //ripetere finché non riduciamo b a zero
begin
r := a%b //resto della divisione di a per b;
Lezioni di Aritmetica Modulare 3

a := b;
b := r;
end;
return a; //quando b diventa 0, il risultato è a

L’algoritmo consiste in una serie di divisioni con resto:

a = b · q1 + r2 0 ≤ r2 < |b|
b = r2 · q2 + r3 0 ≤ r3 < r2
r2 = r3 · q3 + r4 0 ≤ r4 < r3
r3 = r4 · q4 + r5 0 ≤ r5 < r4 (1)
.. .. ..
. . .
rt−2 = rt−1 · qt−1 + rt 0 ≤ rt < rt−1
rt−1 = rt · qt Allora rt = (a, b)

Dati due naturali a, b con a > b, allora c(a, b) è il numero di volte che calcoliamo la
divisione con resto nell’algoritmo di Euclide per ottenere (a, b). Per esempio, c(a, 1) = 1
per ogni a > 1.
Example 1.2. (134, 36) = (36, 26) = (26, 10) = (10, 6) = (6, 4) = (4, 2) = (2, 0). In tal
caso, c(134, 36) = 6.
Example 1.3. La successione di Fibonacci è definita ricorsivamente come segue:
F0 = 1; F1 = 1; Fn = Fn−1 + Fn−2 .
I primi elementi della successione sono: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, . . . . Il
centesimo numero di Fibonacci è F100 = 354224848179261915075. Se dividiamo Fn+1
per Fn otteniamo proprio la relazione Fn+1 = Fn + Fn−1 , cioé il quoto è 1 ed il resto è
Fn−1 < Fn . Fn+1 e Fn sono relativamente primi:
(Fn+1 , Fn ) = (Fn , Fn−1 ) = (Fn−1 , Fn−2 ) = · · · = (F2 , F1 ) = 1.
n = c(Fn+1 , Fn ) è il numero di volte che calcoliamo la divisione con resto.
Per definizione log2 (b) è uguale al numero reale x tale che 2x = b.
Lemma 1.6. Siano a > b interi positivi. Il numero di volte che iteriamo la divisione con
resto nell’algoritmo di Euclide è al più 2log2 (b) + 1.
Proof. Siano r0 = a e r1 = b e
r0 = r1 q1 + r2 0 ≤ r2 < r1
r1 = r2 q2 + r3 0 ≤ r3 < r2
r2 = r3 q3 + r4 0 ≤ r4 < r3
r3 = r4 q4 + r5 0 ≤ r5 < r4 (2)
.. .. ..
. . .
rt−2 = rt−1 qt−1 + rt 0 ≤ rt < rt−1
rt−1 = rt qt
Lezioni di Aritmetica Modulare 4

Allora ri > 2ri+2 , per ogni i ≥ 0. Infatti,


ri = ri+1 qi+1 + ri+2 0 ≤ ri+2 < ri+1
≥ ri+1 + ri+2 ri > ri+1 da cui segue qi+1 ≥ 1 (3)
> 2ri+2 ri+2 < ri+1
Iterando il procedimento si ottiene:
b = r1 > 2r3 > 22 r5 > · · · > 2k r2k+1 .
Se 2k > b segue che r2k+1 < 1, ossia r2k+1 = 0. In termini dell’algoritmo di Euclide (2)
si ha rt+1 = 0, cosı̀ abbiamo t + 1 ≤ 2k + 1, da cui t ≤ 2k. Inoltre vi sono esattamente
t divisioni effettuate in (2), cosı̀ l’algoritmo di Euclide termina in al più 2k iterazioni.
Consideriamo il più piccolo k tale che 2k ≥ b > 2k−1 . Allora si ha:
numero di iterazioni ≤ 2k = 2(k − 1) + 2 < 2log2 (b) + 2.

Lemma 1.7. Siano a, b numeri interi non entrambi nulli. Allora esistono interi x e y
tali che ax + by = (a, b).
Proof. Dal Lemma 1.3 segue aZ + bZ = (a, b)Z, dove (a, b) è il massimo comun divisore
di a, b.
Osservazione: Siano a, b interi non entrambi nulli. Allora l’equazione lineare ax + by = 0
rappresenta la retta dei vettori (x, y) che sono ortogonali al vettore (a, b). Il Lemma 1.3
afferma che la retta ax + by = c parallela alla retta ax + by = 0 passa attraverso dei punti
che hanno coordinate intere sse c è un multiplo di (a, b).
Theorem 1.1. (Proprietà di Bézout) Siano a, b, c numeri interi e sia d = (a, b) il massimo
comun divisore di a, b. Allora l’equazione lineare ax + by = c ha soluzioni intere sse d|c.
Proof. Dal Lemma 1.3 si ha aZ + bZ = dZ. Quindi c ∈ aZ + bZ sse c ∈ dZ.
Example 1.4. Trovare una soluzione intera dell’equazione 240x + 36y = 12. Possiamo
dividere tutti i coefficienti per 12 ed ottenere 20x + 3y = 1. Siccome 20 e 3 sono relati-
vamente primi (cioé (20, 3) = 1) allora le soluzioni intere di 20x + 3y = 1 esistono. Si
vede facilmente che x = −1 e y = 7 è una soluzione di 20x + 3y = 1. La stessa soluzione
risolve 240x + 36y = 12.
Example 1.5. Trovare una soluzione intera dell’equazione 120x + 81y = 12. Dividendo
per 3 si ottiene 40x + 27y = 4. Siccome 40 e 27 sono relativamente primi (cioé (40, 27) =
1) allora le soluzioni intere di 40x + 27y = 1 esistono. Applichiamo l’algoritmo di Euclide
per il calcolo del massimo comun divisore: 40 = 27 + 13 e 27 = 13 ∗ 2 + 1. Quindi
1 = 27 − 13 ∗ 2 = 27 − (40 − 27) ∗ 2 = 27 − 40 ∗ 2 + 27 ∗ 2 = (−2)40 + 27 ∗ 3. Quindi
una soluzione intera dell’equazione 40x + 27y = 4 è: x = −8, y = 12. Le stesse soluzioni
funzionano per l’equazione lineare 120x + 81y = 12.
Example 1.6. Non esistono soluzioni intere dell’equazione 6x + 2y = 5, perché 2 = (6, 2)
non divide 5.
Lezioni di Aritmetica Modulare 5

1.1. Massimo comun divisore e matrici


Ricordiamo che il minimo comune multiplo di due numeri interi a e b è il più piccolo
naturale k tale che a|k e b|k. È denotato da mcm(a, b).
Sia a > b > 0. Consideriamo il sistema lineare
    
1 0 x a
= (4)
0 1 y b
 
a
Esso ammette banalmente come unica soluzione il vettore . Sappiamo anche che ogni
b
sistema lineare, che si ottiene dal sistema (4) applicando alla matrice completa
 
1 0 a
A=
0 1 b

le regole del metodo di eliminazione di Gauss (scambio di due righe; sostituzione di una
riga con la somma della riga stessa
  con un’altra moltiplicata per uno scalare r) ammette
a
come unica soluzione il vettore .
b
Se a = bq + r con 0 ≤ r < b, si sottrae alla prima riga q volte la seconda riga e poi si
scambiano la prima e la seconda riga:
       
1 0 a 1 −q a − bq 1 −q r 0 1 b
⇒ = ⇒
0 1 b 0 1 b 0 1 b 1 −q r

Siccome b > r, si procede in maniera simile fino a quando nella terza colonna della matrice
non appare uno 0 in posizione A23 . Alla fine otterremo una matrice
 
c d n
e f 0

per cui il sistema lineare     


c d x n
=
e f y 0
 
a
ha come unica soluzione il vettore .
b
      
c d a ca + db n
= =
e f b ea + f b 0
Lezioni di Aritmetica Modulare 6

L’algoritmo è il seguente.
Matrice(nat a, nat b)
{matrix
 A; nat q, z}
1 0 a
A := ;
0 1 b
while (A23 6= 0) do //ripetere finché non riduciamo A23 a zero
begin
A13
q := A 23
//quoto della divisione A13 = A23 q + r con resto 0 ≤ r < A23 ;
for i := 1 to 3 do A1i := A1i − qA2i ; //Sottrai q volte la riga 2 dalla riga 1 di A ;
for i := 1 to 3 do z := A1i ; A1i := A2i ; A2i := z; Scambia le righe 1 e 2 della matrice A;
end;
return A13 = A11 a + A2 b; // A23 = 0 implica (a, b) = A13 = A11 a + A12 b
return A21 a = −A22 b; // A23 = 0 implica mcm(a, b) = |A21 a| = | − A22 b|
Example 1.7. Calcoliamo il massimo comun divisore e il minimo comune multiplo di 53
e 71 con il metodo matriciale:
     
1 0 71 0 1 53 1 −1 18
⇒ ⇒
0 1 53 1 −1 18 −2 3 17
   
−2 3 17 3 −4 1
⇒ ⇒
3 −4 1 −53 71 0
Quindi,       
3 −4 71 3 × 71 − 4 × 53 1
= =
−53 71 53 −53 × 71 + 71 × 53 0
da cui
(71, 53) = 1 = 3 × 71 − 4 × 53; mcm(71, 53) = 71 × 53.
Example 1.8. (134, 36) = (26, 36) = (26, 10) = (6, 10) = (6, 4) = (2, 4) = (2, 0) perché
       
1 0 134 0 1 36 1 −3 26 −1 4 10
⇒ ⇒ ⇒
0 1 36 1 −3 26 −1 4 10 3 −11 6
     
3 −11 6 −4 15 4 7 −26 2
⇒ ⇒ ⇒
−4 15 4 7 −26 2 −18 67 0
Quindi,       
7 −26 134 7 × 134 − 26 × 36 2
= =
−18 67 36 −18 × 134 + 67 × 36 0
da cui

(134, 36) = 2 = 7 × 134 − 26 × 36; mcm(134, 36) = 67 × 36 = 18 × 134 = 2412.

Example 1.9. Calcoliamo il massimo comun divisore di numeri di Fibonacci consecutivi


(si veda esempio 1.3). Poniamo F−2 = 1 e F−1 = 0.
       
1 0 Fn 0 1 Fn−1 1 −1 Fn−2 −1 2 Fn−3
⇒ ⇒ ⇒
0 1 Fn−1 1 −1 Fn−2 −1 2 Fn−3 2 −3 Fn−4
Lezioni di Aritmetica Modulare 7

     
2 −3 Fn−4 −3 5 Fn−5 5 −8 Fn−6
⇒ ⇒ ⇒ ⇒ ...
−3 5 Fn−5 5 −8 Fn−6 −8 13 Fn−7
Si noti che i numeri 2, 3, 5, 8, 13, . . . che compaiono nella matrice sono numeri di Fi-
bonacci. In altri termini,
       
F−2 −F−1 Fn −F−1 F0 Fn−1 F0 −F1 Fn−2 −F1 F2 Fn−3
⇒ ⇒ ⇒
−F−1 F0 Fn−1 F0 −F1 Fn−2 −F1 F2 Fn−3 F2 −F3 Fn−4
     
F2 −F3 Fn−4 −F3 F4 Fn−5 F4 −F5 Fn−6
⇒ ⇒ ⇒ ⇒ ...
−F3 F4 Fn−5 F4 −F5 Fn−6 −F5 F6 Fn−7
Si noti che ad ogni passo abbiamo

F2i Fn − F2i+1 Fn−1 = Fn−(2i+2) ; F2i−1 Fn − F2i Fn−1 = −Fn−(2i+1)

Se n è pari e 2i + 2 = n si ha
2
1 = F0 = Fn−2 Fn − Fn−1 .

Se n è dispari e 2i + 1 = n si ha
2
Fn−1 −Fn−2 Fn = 1 = (Fn , Fn−1 ); Fn−1 Fn −Fn Fn−1 = F−1 = 0; mcm(Fn , Fn−1 ) = Fn−1 Fn

L’algoritmo di Euclide ed i numeri di Fibonacci sono collegati come segue. Siano


r0 = a > r1 = b due numeri interi positivi arbitrari. Allora, r0 = r1 q1 + r2 , 0 ≤ r2 < r1 .
Da
r1 = r2 q2 + r3 , 0 ≤ r3 < r2 .
e da q2 > 0 si ottiene
b = r1 > r2 + r3 > 2r3
Similmente,
r2 = r3 q3 + r4 , 0 ≤ r4 < r3 .
Da q3 > 0 si ottiene
r2 > r3 + r4 > 2r4
e quindi
b = r1 > r2 + r3 > 2r3 + r4 = F2 r3 + F1 r4 > 3r4 = F3 r4 .
In generale abbiamo
b = r1 > Fn−1 rn + Fn−2 rn+1 > Fn rn+1 ,
dove Fn è l’ennesimo numero di Fibonacci.
Lezioni di Aritmetica Modulare 8

Figure 1. Aritmetica dell’orologio

2. L’aritmetica dell’orologio
L’aritmetica modulare (o aritmetica dell’orologio) è stata introdotta da Gauss ad inizio
ottocento. Consideriamo un orologio con n > 0 tacche che corrispondono ad i numeri
da 0 a n − 1 (Si veda la figura per il caso n = 9). Indichiamo con Zn = {0, 1, . . . , n −
1}. Scorriamo l’orologio in senso orario partendo da 0. Una mossa +1 consiste nello
spostarsi in senso orario dalla tacca in cui ci troviamo alla tacca successiva. La mossa
+1 corrisponde all’operazione di aggiungere 1. Quando arriviamo al numero n − 1 ed
eseguiamo una ulteriore mossa +1, scopriamo che (n − 1) + 1 = 0 anziché (n − 1) + 1 = n.
Quindi, contrariamente ai numeri naturali, il numero 0 è il successore del numero n − 1
e la funzione determinata dalle mosse +1 definisce una funzione bigettiva dall’insieme
Zn nell’insieme Zn . Viceversa, scorriamo l’orologio in senso antiorario partendo da 0.
Una mossa −1 consiste nello spostarsi in senso antiorario dalla tacca in cui ci troviamo
alla tacca precedente. La mossa −1 corrisponde a sottrarre 1. Quindi 0 − 1 = n − 1
anziché essere indefinito come avviene nell’aritmetica dei numeri naturali. La funzione
determinata dalle mosse −1 definisce una funzione bigettiva dall’insieme Zn nell’insieme
Zn . Essa è la funzione inversa della funzione determinata dalle mosse +1.
Come possiamo “rappresentare” un intero a nell’orologio? Adottiamo due strategie
diverse se a è positivo oppure negativo. Se a è positivo, eseguiamo esattamente un numero
di mosse +1 pari ad a volte partendo da 0. La tacca in cui ci troviamo rappresenta il
numero intero positivo a nell’orologio. Se a è negativo, eseguiamo esattamente un numero
di mosse −1 pari a |a| volte partendo da 0. La tacca in cui ci troviamo rappresenta il
Lezioni di Aritmetica Modulare 9

numero intero negativo a nell’orologio. In entrambi i casi la tacca del numero a rappresenta
il numero
modn (a)
che è il resto della divisione di a per n. Esso è un numero naturale compreso tra 0 e n − 1.

Notazione: Talvolta scriviamo a mod n al posto di modn (a).

Definiamo la somma +n (modulo n) ed il prodotto ∗n (modulo n) sui numeri interi


come segue:
a +n b = modn (a + b); a ∗n b = modn (ab).
Il risultato della somma e del prodotto è sempre un valore compreso tra 0 e n − 1,
quindi rappresentabile nell’orologio.
Lemma 2.1. L’insieme Zn = {0, 1, . . . , n − 1} è chiuso rispetto alle operazioni di somma
+n e prodotto ∗n .
Per semplificare i conti, utilizziamo la seguente proposizione
Proposition 2.1. Valgono le seguenti uguaglianze (a, b ∈ Z):
1. modn (a + b) = modn (modn (a) + modn (b));
2. modn (ab) = modn (modn (a) modn (b)).
Example 2.1. Sia n = 9. Allora mod9 (95·37) = mod9 (mod9 (95)+mod9 (37)) = mod9 (5·
2) = mod9 (10) = 1. Se non avessimo utilizzato la proposizione avremmo dovuto calcolare
mod9 (3515), che è più difficile specialmente se n è grande.
Se ci restringiamo ad i numeri compresi tra 0 e n − 1, possiamo anche definire la somma
+n come segue (0 ≤ a, b < n):

a
 se b = 0
a +n b = a + 1 se b = 1

(a +n (b − 1)) + 1 se b 6= 0, 1.

Example 2.2. 7 +9 3 = (7 +9 2) + 1 = ((7 +9 1) + 1) + 1 = ((7 + 1) + 1) + 1 = (8 + 1) + 1 =


0 + 1 = 1.
Possiamo definire il prodotto ∗n sui numeri tra 0 e n − 1 utilizzando la somma modulare
+n : 
0
 se b = 0
a ∗n b = a se b = 1

(a ∗n (b − 1)) +n a se b 6= 0, 1.

Example 2.3. 7 ∗9 3 = (7 ∗9 2) +9 7 = ((7 ∗9 1) +9 7) +9 7 = (7 +9 7) +9 7 = 5 +9 7 = 3.


Nella parte finale abbiamo applicato la definizione della somma +9 per arrivare al risultato
finale 3.
L’aritmetica dell’orologio è correlata alla teoria delle congruenze che introduciamo nella
prossima sezione.
Lezioni di Aritmetica Modulare 10

3. Congruenze
Le tacche numerate dell’orologio della sezione precedente sono i rappresentanti delle n
classi di equivalenza di una relazione di equivalenza ≡n definita sugli interi. Nella prossima
definizione definiamo la relazione ≡n .
Definition 3.1. Sia n > 0. Diciamo che a, b ∈ Z sono congruenti modulo n, e scriviamo

a ≡ b (mod n) oppure a ≡n b,

se modn (a) = modn (b).


Quindi abbiamo a ≡n b se il resto della divisione di a per n è uguale al resto della
divisione di b per n.
Lemma 3.1. Sia n > 0 e siano a e b numeri interi. Allora, a ≡n b sse n divide b − a.
Proof. Supponiamo che a ≡n b. Allora, dividendo a e b per n, si ha: a = q1 n + r e
b = q2 n + r con 0 ≤ r < n. Ne segue che b − a è divisibile per n: b − a = n(q2 − q1 ).
Per la direzione opposta, supponiamo che b−a = nt per un opportuno t ∈ Z. Dividiamo
sia a che b per n: a = q1 n + r1 e b = q2 n + r2 con 0 ≤ r1 , r2 < n. Allora, b − a =
n(q2 − q1 ) + (r2 − r1 ) = nt, da cui segue r2 − r1 = n(t + q1 − q2 ). Ma |r2 − r1 | < n. Quindi
l’unica possibilità è che r1 = r2 .
Lemma 3.2. La relazione ≡n è una relazione di equivalenza su Z che è compatibile
rispetto alle operazioni di addizione, moltiplicazione e esponenziazione di interi:
(i) a ≡n b ∧ c ≡n d ⇒ a + c ≡n b + d.

(ii) a ≡n b ∧ c ≡n d ⇒ ac ≡n bd.

(iii) a ≡n b ⇒ ak ≡n bk .
Proof. Sia modn (a) = modn (b) e modn (c) = modn (d).
(i) Sia Dalla Proposizione 2.1(1) e dall’ipotesi si ha: modn (a + c) = modn (modn (a) +
modn (c)) = modn (modn (b) + modn (d)) = modn (b + d).
(ii) La prova è simile a quella del punto (i).
(iii) La prova è per induzione su k utilizzando (ii).
La relazione ≡n partiziona Z in n classi di equivalenza. Se a è un intero scriveremo [a]n
per la classe di equivalenza di a modulo l’equivalenza ≡n . Ecco la partizione determinata
da ≡n :

[0]n = {kn : k ∈ Z}; [1]n = {1 + kn : k ∈ Z}; ... [n − 1]n = {(n − 1) + kn : k ∈ Z}.

Scegliamo come rappresentanti delle classi di equivalenza i numeri 0, 1, 2, . . . , n − 1.


Questi numeri corrispondono alle tacche di un orologio che segna le ore da 0 sino ad n − 1
(si veda la figura con n = 4).
Le operazioni di somma +n e prodotto ∗n , definite nella sezione precedente, agiscono
sulle classi di equivalenza modulo n tramite i loro rappresentanti.
Lezioni di Aritmetica Modulare 11

Figure 2. Aritmetica dell’orologio modulo 4

Proposition 3.1. L’insieme Zn = {0, 1, 2, . . . , n − 1} con le operazioni di somma +n e


prodotto ∗n modulo n (come definite nella sezione precedente nel caso n = 9) costituisce
un anello commutativo con unità.
(Zn , +n , 0) è un gruppo commutativo rispetto alla somma:

• Proprietà associativa: (x +n y) +n z = x +n (y +n z);

• Proprietà commutativa: x +n y = y +n x;

• Elemento neutro: x +n 0 = x = 0 +n x;

• Opposto: x +n (−x) = 0 = (−x) +n x.

(Zn , ∗n , 1) è un monoide commutativo rispetto al prodotto:

• Proprietà associativa: (x ∗n y) ∗n z = x ∗n (y ∗n z);

• Proprietà commutativa: x ∗n y = y ∗n x;

• Elemento neutro: x ∗n 1 = x = 1 ∗n x;

Il prodotto distribuisce rispetto alla somma:

• x ∗n (y +n z) = (x ∗n y) +n (x ∗n z).

Nei prossimi due lemmi studiamo proprietà di cancellazione e periodicità delle potenze.

Lemma 3.3. Proprietà di cancellazione: ac ≡n bc ∧ (c, n) = 1 ⇒ a ≡n b.


Lezioni di Aritmetica Modulare 12

Proof. Dal Lemma 1.7 e dall’ipotesi (c, n) = 1 esistono interi x e y tali che cx + ny = 1.
Siccome cx = n(−y) + 1, allora cx ≡n 1. Dal Lemma 3.2(ii) si ricava acx ≡n a e bcx ≡n b.
Dall’ipotesi ac ≡n bc segue che acx ≡n bcx. Quindi a ≡n b.

Lemma 3.4. Sia n > 0 ed a un intero. La sequenze di potenze modulo n

a0 a1 a2 a3 a4 a5 a6 ...
1 modn (a1 ) modn (a2 ) modn (a3 ) modn (a4 ) modn (a5 ) modn (a6 ) . . .

è periodica a partire da un certo punto in poi: esistono k e p ≤ n tali che ak ≡n ak+rp per
ogni r ≥ 0.

Example 3.1. Calcoliamo le potenze del 3 modulo 7:

30 31 32 33 34 35 36
1 3 2 6 4 5 1

Il periodo è 6. Per esempio 32 ≡ 38 . Infatti 38 = 32 36 ≡7 32 .

Example 3.2. Calcoliamo le potenze del 2 modulo 8:

20 21 22 23 24
1 2 4 0 0

Il periodo è 1 a partire da 23 .

Concludiamo la sezione con una serie di esempi che provano l’utilità della Proposizione
2.1 e dell’aritmetica modulare.

Example 3.3. Vogliamo calcolare qual’è il resto della divisione di 95758 per 5. Siccome
10 è divisibile per 5, si ha che 95758 = 8 + 5 · 10 + 7 · 102 + 5 · 103 + 9 · 104 ≡5 8 ≡5 3.

Example 3.4. Vogliamo calcolare qual’è il resto della divisione di 95758 per 7. Siccome
10 è 3 modulo 7, si ha che

95758 = 8 + 5 · 10 + 7 · 102 + 5 · 103 + 9 · 104


≡7 1 + 5 · 3 + 0 · 32 + 5 · 33 + 2 · 34
≡7 1 + 15 + 5 · 32 · 3 + 2 · 32 · 32
≡7 1+1+5·2·3+2·2·2
≡7 2+2+1=5

Example 3.5. Vogliamo determinare mod5 (95758 · 37988). Piuttosto che eseguire prima
la moltiplicazione e poi il calcolo del resto della divisione per 5, calcoliamo direttamente
il resto della divisione di 95758 per 5 ed il resto della divisione di 37988 per 5. Si ha:
mod5 (95758) = 3 e mod5 (37988) = 3. Quindi mod5 (95758 · 37988) = 4.

Example 3.6. Calcoliamo 3128 modulo 7. Siccome 33 = 27 ≡7 −1, allora 3128 = 33·42+2 =
(33 )42 · 32 ≡7 (−1)42 · 2 = 2.
Lezioni di Aritmetica Modulare 13

4. Teoremi di Fermat e di Wilson


Pierre de Fermat, uno dei matematici più importanti dell’ultimo millennio, è nato il 17
agosto 1601 a Beaumont-de-Lomagne (Francia) ed è morto il 12 gennaio 1665 a Castres.
Era magistrato di professione e si occupava di matematica nel tempo libero. Presentiamo
qui di seguito uno dei suoi risultati più importanti.

Theorem 4.1. (Piccolo Teorema di Fermat) Se p è un numero primo e p non divide a,


allora ap−1 ≡p 1.

Proof. Consideriamo i seguenti multipli positivi di a:

a, 2a, 3a, . . . , (p − 1)a.

Nessuno di questi numeri è congruente ad un altro modulo p: se na ≡p ma allora dal


Lemma 3.3 potremmo cancellare a ed ottenere m ≡p n, che è impossibile in quanto
1 ≤ n, m ≤ p − 1. Quindi i numeri a, 2a, 3a, . . . , (p − 1)a modulo p corrispondono in un
qualche ordine ai numeri 1, 2, 3, . . . , p − 1. Si ha quindi:

a · 2a · 3a · · · · · (p − 1)a ≡p 1 · 2 · 3 · · · · · (p − 1)

da cui
ap−1 (p − 1)! ≡p (p − 1)!
Cancellando (p − 1)!, che non è divisibile per p, da entrambi i membri otteniamo la
conclusione1 .

Corollary 4.1. Se p è primo, allora ap ≡p a.

Example 4.1. Vogliamo calcolare 5236 modulo 13. Applicando il Piccolo Teorema di
Fermat sappiamo che 512 ≡13 1. Quindi

5236 = 512·19+8 = (512 )19 58 ≡13 119 58 = 58 = (52 )4 ≡13 (−1)4 = 1

Theorem 4.2. Se p e q sono primi distinti tali che ap ≡q a e aq ≡p a, allora apq ≡pq a.

Proof. Dal Corollario 4.1 si ha (ap )q ≡q ap e (aq )p ≡p aq . Per ipotesi ap ≡q a e aq ≡p a,


quindi apq ≡q a e apq ≡p a. In conclusione p|apq − a e q|apq − a e quindi pq|apq − a.
1
Un’altra prova del Piccolo Teorema di Fermat si ottiene per induzione su a come segue. La base
dell’induzione a = 1 è ovvia. Supponiamo vero il teorema per a e dimostriamolo per a + 1:
p
X p!
(a + 1)p = ( )ai
i=0
i!(p − i)!

p!
Siccome i!(p−i)! ≡p 0 per ogni 1 ≤ i ≤ p − 1 si ha:

(a + 1)p ≡p ap + 1 ≡p a + 1.

perché per ipotesi di induzione ap ≡p a.


Lezioni di Aritmetica Modulare 14

Example 4.2. Consideriamo p = 11 e q = 31 numeri primi. Allora

211 = 2 · 210 = 2 · 25 · 25 ≡31 2 · 1 · 1 = 2.

Per il Piccolo Teorema di Fermat si ha anche:

231 = 2(210 )3 ≡11 2 · 13 = 2.

Applicando il teorema precedente si ha

211·31 ≡11·31 2

che si può anche scrivere


2341 ≡341 2.

Theorem 4.3. Se p è un numero primo, allora (Zp , +p , 0, ∗p , 1) è un campo numerico.

Proof. Dalla Proposizione 3.1 dobbiamo soltanto provare che ogni elemento a ∈ Zp ha un
inverso. La conclusione segue dal Piccolo Teorema di Fermat perché

aap−2 ≡p 1.

Quindi ap−2 è l’inverso di a.

Theorem 4.4. (Teorema di Wilson) Se p è primo, allora (p − 1)! ≡p −1.

Proof. Supponiamo p > 3 primo. Sia 1 ≤ a ≤ p − 1. Consideriamo la congruenza lineare


ax ≡p 1. Siccome a e p sono relativamente primi, questa congruenza ammette un’unica
soluzione modulo p. Quindi esiste un unico a0 con 1 ≤ a0 ≤ p − 1 tale che aa0 ≡p 1.
Dal fatto che p è primo segue che a = a0 soltanto per a = 1 e a = p − 1. Infatti la
congruenza quadratica a2 ≡p 1 si scrive a2 − 1 = (a − 1)(a + 1) ≡p 0. Si ricava a = 1
oppure p|a + 1 da cui a = p − 1.
Da tutto questo segue che
2 · 3 · · · · · (p − 2) ≡p 1
che si scrive anche
(p − 2)! ≡p 1.
Quindi
(p − 1)! = (p − 1) · (p − 2)! ≡p p − 1 ≡p −1.

Chiudiamo questa sezione con una applicazione del Teorema di Wilson allo studio delle
congruenze quadratiche.

Theorem 4.5. Sia p un numero primo dispari. La congruenza quadratica x2 ≡p −1


ammette una soluzione modulo p sse p ≡4 1.
Lezioni di Aritmetica Modulare 15

Proof. (⇒) Supponiamo che esista a tale che a2 ≡p −1. Ricordiamo che p−1 è un numero
pari. Dal Piccolo Teorema di Fermat abbiamo:
p−1 p−1
1 ≡p ap−1 = (a2 ) 2 ≡p (−1) 2 .

Ne segue che p−1 2


è pari e quindi p − 1 è divisibile per 4. In altri termini, p ≡4 1.
(⇐) Supponiamo che p ≡4 1. Dal Teorema di Wilson abbiamo (p − 1)! ≡p −1. Siccome
p−1
2
è pari, allora possiamo dividere i numeri da 1 a p − 1 in due parti equinumeriche:
i numeri da 1 a p−1 2
, ed i numeri da p+1
2
a p − 1. Abbiamo che p − 1 ≡p −1, p − 2 ≡p
p+1 p−1
−2, . . . , 2 ≡p − 2 . Quindi

p−1 p−1 p − 1 p−1 2


−1 ≡p (p − 1)! ≡p ( )!(−1) 2 ( )! = ( !) .
2 2 2

5. Teorema di Eulero
Leonhard Euler, noto in Italia come Eulero, è stato il più importante matematico del
diciottesimo secolo. Eulero è nato il 15 aprile 1707 a Basilea in Svizzera ed è morto il 18
settembre 1783 a San Pietroburgo in Russia.
Si definisca la seguente funzione di Eulero:

φ(n) = numero di interi positivi ≤ n che sono relativamente primi con n.

Example 5.1. Se n è primo, φ(n) = n − 1. Ecco altri esempi: φ(8) = 4 e φ(14) = 6.

Lemma 5.1. n è primo sse φ(n) = n − 1.

Proof. Se φ(n) = n − 1 allora tutti i numeri da 1 a n − 1 sono primi con n. Quindi, n è


primo.

Lemma 5.2. Se p è primo, allora φ(pk ) = pk − pk−1 = pk (1 − p1 ).

Proof. Si ha: (a, pk ) = 1 sse p 6 | a. Vi sono pk−1 interi tra 1 e pk che sono divisibili per p:

p, 2p, 3p, . . . , (pk−1 )p.

Quindi l’insieme {1, 2, . . . , pk } contiene pk − pk−1 interi relativamente primi con p.


Per esempio, φ(9) = φ(32 ) = 32 − 31 = 6.

Lemma 5.3. Se a e b sono relativamente primi, allora φ(ab) = φ(a)φ(b).

Proposition 5.1. Sia n > 0. L’insieme degli interi relativamente primi con n è chiuso
rispetto all’operazione di moltiplicazione (modulo n) e costituisce un gruppo moltiplicativo.

Proof. Sia (a, n) = 1 e (b, n) = 1. Allora si vede facilmente che (ab, n) = 1. Dal Lemma
1.7 esistono interi x, y tali che ax + ny = 1. Ne segue che ax ≡n 1 ed x è l’inverso di
a.
Lezioni di Aritmetica Modulare 16

Theorem 5.1. (Teorema di Eulero) Se n è un intero positivo e (a, n) = 1, allora aφ(n) ≡n


1.

Proof. Siano b1 , b2 , . . . , bφ(n) i numeri minori di n che sono relativamente primi con n.
Allora ab1 , ab2 , . . . , abφ(n) sono congruenti a b1 , b2 , . . . , bφ(n) in qualche ordine. Ne segue
che
(ab1 ) · (ab2 ) · · · · · (abφ(n) ) = aφ(n) (b1 · b2 · · · · · bφ(n) ) ≡n b1 · b2 · · · · · bφ(n)
Siccome ogni bi è primo con n possiamo dividere per b1 · b2 · · · · · bφ(n) ed ottenere la
conclusione.

Example 5.2. φ(100) = φ(22 · 52 ) = φ(22 )φ(52 ) = 100(1 − 21 )(1 − 15 ) = 40. Dal teorema
di Eulero si ricava
340 ≡100 1.
Quindi, per esempio, 3256 = 36·40+16 = (340 )6 316 ≡100 316 . Infine, 316 = (81)4 ≡100
(−19)4 = (361)2 ≡100 612 ≡100 21.

6. Equazioni modulari
Theorem 6.1. La congruenza lineare ax ≡n b ha una soluzione sse (a, n)|b.

Proof. ax ≡n b sse n|(ax − b) sse ∃q(ax − b = nq) sse ∃q(ax − nq = b). Dal Teorema 1.1
di Bézout otteniamo che ax ≡n b sse (a, n)|b.

Example 6.1. Vogliamo trovare, se esiste, una soluzione all’equazione modulare 124x ≡71
17. Siccome 124 ≡71 53, l’equazione si riduce a 53x ≡71 17. Calcoliamo il massimo comun
divisore di 53 e 71 con il metodo matriciale:
     
1 0 71 1 −53 18 1 −53 18
⇒ ⇒
0 1 53 0 1 53 −36 107 17
   
4 −160 1 4 −160 1
⇒ ⇒
−36 107 17 −104 107 + 160 × 17 0

Theorem 6.2. (Teorema cinese del resto) Siano n1 , . . . , nk interi positivi a due a due
relativamente primi (i.e., (ni , nj ) = 1 per i 6= j). Allora il sistema di congruenze lineari

x ≡ a1 (mod n1 )
x ≡ a2 (mod n2 )
... ... ... ...
x ≡ ak (mod nk )

ha una soluzione simultanea che è unica modulo n1 . . . nk .

Diamo due differenti dimostrazioni del teorema.


Proof. Per ogni 1 ≤ i ≤ k si definisca

bi = n1 . . . ni−1 ni+1 . . . nk .
Lezioni di Aritmetica Modulare 17

Si ha (bi , ni ) = 1. Allora la congruenza lineare bi xi ≡ni 1 ha soluzione. Si noti che bi ≡nj 0


per j 6= i. Allora il numero

x = a1 b 1 x 1 + a2 b 2 x 2 + · · · + ak b k x k

risolve il sistema di congruenze lineari. Per esempio, x ≡n1 a1 b1 x1 perché b2 , b3 , . . . , bk ≡n1


0. Inoltre, da b1 x1 ≡n1 1 si ottiene la conclusione x ≡n1 a1 . Lo stesso discorso vale per gli
altri ni .
Supponiamo che oltre ad x vi sia un’altra soluzione y. Allora si ricava facilmente che
x ≡ni y per ogni 1 ≤ i ≤ k. Quindi, n1 . . . nk divide x − y (si ricordi che (ni , nj ) = 1 per
i 6= j). Si conclude x ≡ y mod n1 . . . nk .
Diamo un’altra prova del Teorema Cinese del resto utilizzando il Teorema di Eulero.
Proof. Per ogni 1 ≤ i ≤ k si definisca bi = n1 . . . ni−1 ni+1 . . . nk . Allora
φ(n1 ) φ(n2 ) φ(nk )
x = a1 (b1 ) + a2 (b2 ) + · · · + ak (bk )

risolve il problema.

7. Congruenze quadratiche
8. Applicazione alla Crittografia
Questa sezione è essenzialmente la Sezione 4.6 del libro Bellissima-Montagna, Matem-
atica per l’Informatica, Carrocci Editore, 2008.
Vogliamo inviare un messaggio privato ad un nostro interlocutore. Come prima cosa
codifichiamo il messaggio con un numero M tramite una codifica elementare. Supponiamo
di avere un alfabeto di n caratteri α1 , α2 , . . . , αn . Associamo a ciascun carattere un
numero in progressione evitando i numeri che nella rappresentazione in base 10 contengono
degli zeri. Per ogni i, sia ci il numero che codifica il carattere αi . Allora una stringa
αi1 . . . αik si codifica con il numero (in base 10) ci1 0 . . . 0cik . La cifra 0 è un separatore.
Un messaggio scritto con la codifica elementare può essere facilmente decodificato purché
il nostro interlocutore conosca l’associazione carattere-numero. Questa associazione deve
essere inviata al nostro interlocutore per mail e può quindi finire nelle mani di un intruso.
Per evitare il problema, criptiamo il messaggio. Concordiamo con ciascuno dei nostri
interlocutori una n-upla di numeri a1 , . . . , an a due a due relativamente primi. Tali numeri
sono conosciuti soltanto allo scrivente ed agli interlocutori.
Metodo 1 basa to sul Teorema Cinese del Resto: Sia A = a1 · . . . · an . Possiamo
supporre che la codifica elementare M del nostro messaggio sia < A, altrimenti spezziamo
il messaggio in più parti. Inviamo al nostro interlocutore non il numero M , ma i numeri
b1 ≡a1 M , b2 ≡a2 M ,. . . , bn ≡an M . Chi riceve i numeri b1 , . . . , bn può ricostruire M
dal teorema Cinese del resto perché conosce a1 , . . . , an . Un eventuale intruso (che non
conosce a1 , . . . , an ) non potrebbe. Il metodo ha il problema di comunicare i numeri segreti
a1 , . . . , an ai nostri interlocutori.
Metodo 2 : Questo metodo è stato inventato nel 1977 da Ron Rivest, Adi Shamir e Leon
Adleman ed è indicato con la sigla RSA.
Lezioni di Aritmetica Modulare 18

Ogni utente dispone di una chiave pubblica nota a tutti e una chiave privata. L’utente
U si procura quattro numeri distinti p, q, n, e molto grandi tali che p, q, e sono numeri
primi, n = p · q ed inoltre e è relativamente primo con p − 1 e q − 1 (per esempio, e
potrebbe essere un altro numero primo molto grande).
I numeri p e q costituiscono la chiave privata nota solo all’utente U , mentre i numeri n
ed e costituiscono la chiave pubblica, utilizzata per inviare messaggi ad U .
In linea di principio, chi riuscisse a scomporre in fattori primi n potrebbe decodificare
il messaggio, ma non esistono algoritmi efficienti per la scomposizione in fattori primi.
Il signor X vuole inviare un messaggio in codice ad U senza che nessuno lo possa de-
codificare. Il signor X considera la codifica elementare M del messaggio. Si può supporre
che M < n, altrimenti si spezza il messaggio in tante parti e si spediscono separatamente.
Possiamo supporre che M sia primo con n. Se no, si può renderlo primo con n aggiungendo
un simbolo speciale in fondo.
Il signor X cerca nella pagina web di U la chiave pubblica di U , ossia n ed e. Il signor
X calcola
modn (M e ).
Per calcolare questo numero si applicano le tecniche che abbiamo imparato nelle sezioni
precedenti.
Il numero N < n tale che
N ≡n M e
costituisce il messaggio criptato che il signor X invia per email al signor U . SOLO U può
decodificare N per ottenere M , quindi non è importante se qualcuno intercetta N .
Come U decodifica N : U calcola la funzione di Eulero φ(n) = φ(pq) = (p − 1)(q − 1).
Poi l’utente U risolve la congruenza modulare ex ≡φ(n) 1. Tale congruenza modulare
ammette soluzione perché e è relativamente primo con φ(n) = (p − 1)(q − 1). Indichiamo
con x0 una soluzione di tale equazione modulare. Dopo U calcola

modn (N x0 ).

Tale numero è la codifica elementare M del messaggio criptato. Infatti

N x0 ≡n (M e )x0 ≡n M ex0 .

Ora essendo ex0 ≡φ(n) 1, esiste un numero k tale che ex0 = 1 + kφ(n). Allora

N x0 ≡n (M e )x0 ≡n M ex0 ≡n M 1+kφ(n) = M (M kφ(n) ) = M (M φ(n) )k ≡n M

per il Teorema di Eulero.


Un eventuale intruso per trovare M dovrebbe conoscere φ(n) = (p − 1)(q − 1), che è im-
possibile da calcolare se non si conosce la scomposizione in fattori primi di n. Difficilissima
da calcolare.