Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Arithmétique modulaire, PGCD et nombres premiers

Après cette leçon: Je peux calculer avec des restes, un PGCD et des nombres premiers.

Leçon de 60 min8 commandesLab de compilation et d’architecture : gcc, flex, bison et RISC-V dans une VM

Quel jour sera-t-on dans cent jours ?

L’arithmétique modulaire calcule avec les restes d’une division : l’heure sur une horloge, le jour de la semaine, la clé d’un numéro. Avec le PGCD et les nombres premiers, elle sert à vérifier des numéros et, plus tard, à chiffrer des messages.

Il est 15 h et un cours dure 10 h : il finit à 1 h du matin, pas à 25 h. On ne garde que le reste dans la division par 24.

À la fin de cette leçon

Remarque

Je peux calculer avec des restes, un PGCD et des nombres premiers.

Mots-clés

MotCe que ça veut direExemple
Modulole reste d’une division entière25 modulo 24 = 1
Congruentqui a le même reste dans la division par le même nombre
PGCDle plus grand nombre qui divise deux entiers
Nombre premierun entier supérieur à 1 divisible seulement par 1 et par lui-même13
Inverse modulaireun nombre qui, multiplié par a, donne le reste 1
Clé de contrôleun chiffre calculé qui sert à détecter une erreur de frappe

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Modulo garde seulement le reste

Diviser 17 par 5 donne 3 et il reste 2. On dit que 17 modulo 5 vaut 2.

Deux nombres sont congruents modulo 5 s’ils ont le même reste. 17 et 22 le sont : tous deux laissent 2. L’horloge compte modulo 24, la semaine modulo 7.

Exemple travaillé : la semaine tourne modulo 7

Dans combien de joursDivision par 7ResteJour si on part un lundi
33 = 0 × 7 + 33Jeudi
77 = 1 × 7 + 00Lundi
1010 = 1 × 7 + 33Jeudi
100100 = 14 × 7 + 22Mercredi

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Le reste de 17 par 5

Commande
echo $((17 % 5))

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le reste de 100 par 7

Commande
python3 -c "print(100 % 7)"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Erreur fréquente

Attention

Beaucoup pensent que le reste de -7 par 3 est le même partout. Ce n’est pas le cas. Python rend toujours un reste positif ou nul, ici 2. Le shell et le langage C gardent le signe et rendent -1. Testez avant de vous fier à un langage.

Un reste négatif en Python

Commande
python3 -c "print(-7 % 3)"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le même calcul dans le shell

Commande
echo $((-7 % 3))

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le PGCD se trouve par divisions successives

Le PGCD de 84 et 36 est le plus grand nombre qui divise les deux : 12. Euclide l’a trouvé sans lister les diviseurs.

On divise 84 par 36 : il reste 12. Puis 36 par 12 : il reste 0. Le dernier reste non nul, 12, est le PGCD.

Exemple travaillé : le PGCD de 84 et 36

ÉtapeDivisionReste
184 = 36 × 2 + 1212
236 = 12 × 3 + 00
RéponseLe dernier reste non nul12

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

L’algorithme d’Euclide en Python

Code: python
# L’algorithme d’Euclide : on remplace (a, b) par (b, reste de a par b).
a = 84
b = 36
while b != 0:
    reste = a % b
    print(a, "=", b, "x", a // b, "+", reste)
    a = b
    b = reste
print("PGCD :", a)
# Changez a en 252 et b en 105 puis relancez : prévoyez le PGCD.

Vérifier avec la bibliothèque

Commande
python3 -c "import math; print(math.gcd(84, 36))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un nombre premier n’a que deux diviseurs

Un nombre premier a exactement deux diviseurs : 1 et lui-même. 13 est premier. 15 ne l’est pas, car 3 le divise.

Pour tester n, on cherche un diviseur parmi 2, 3, 4 et ainsi de suite. Si aucun ne convient, n est premier. 1 n’est pas premier.

Les nombres premiers avant 30

Commande
python3 -c "print([n for n in range(2, 30) if all(n % d for d in range(2, n))])"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Inverse modulaire : le PGCD doit valoir 1

Modulo 7, quel nombre x vérifie 3 fois x = 1 ? On essaie : 3, 6, 2, 5, 1. Le cinquième rang donne 1, donc x = 5 est l’inverse modulaire de 3.

Il existe seulement si le PGCD de 3 et 7 vaut 1. Modulo 8, le nombre 4 n’a pas d’inverse : 4 et 8 ont pour PGCD 4.

Exemple travaillé : 3 fois x modulo 7

x123456
3 × x369121518
Reste par 7362514

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

L’inverse de 3 modulo 7

Commande
python3 -c "print(pow(3, -1, 7), pow(2, 10, 1000))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une clé de contrôle détecte une erreur

Les numéros de sécurité sociale français se terminent par une clé. On prend les treize premiers chiffres comme un grand nombre n. La clé vaut 97 moins le reste de n par 97.

Pour l’exemple 1850575123456, le reste est 24, donc la clé est 73. Une erreur de frappe change presque toujours le reste, et la clé ne colle plus.

Calculer la clé de l’exemple

Commande
python3 -c "print(1850575123456 % 97, 97 - 1850575123456 % 97)"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pour aller plus loin

Changez un chiffre du numéro d’exemple dans la dernière commande et relancez-la. Notez la nouvelle clé : elle n’est plus 73.

Puis cherchez deux entiers inférieurs à 20 dont le PGCD vaut 1 sans qu’aucun des deux soit premier. Par exemple 8 et 9 : écrivez pourquoi.

À propos de ce labo et de sa source: Lab de compilation et d’architecture : gcc, flex, bison et RISC-V dans une VM

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.