Chapitre 917 minDébutant
Multiples modulo n, liste circulaire et inverse modulaire
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- appliquer la propriété : modulo n, les multiples de a sont ceux de PGCD(a, n) ;
- dire si le parcours d'une liste circulaire par sauts est exhaustif ;
- trouver l'inverse d'un entier modulo n, ou montrer qu'il n'existe pas ;
- résoudre une équation a × x ≡ b [n].
5 exercices corrigés1 schéma
L'inverse de a modulo n est un entier a' tel que a × a' ≡ 1 [n] ; il existe si et seulement si a et n sont premiers entre eux, c'est-à-dire si PGCD(a, n) = 1. Par exemple, l'inverse de 7 modulo 26 est 15, car 7 × 15 = 105 = 4 × 26 + 1. Cette condition découle d'une propriété au programme du BTS SIO : modulo n, les multiples de a sont exactement les multiples de PGCD(a, n). Ce chapitre explique cette propriété, son application au parcours d'une liste circulaire par sauts, puis le calcul de l'inverse modulaire et la résolution d'équations du type a × x ≡ b [n], indispensable pour déchiffrer un message.
Les multiples de a modulo n
Calcule les multiples de 8 et réduis-les modulo 12 :
| k | 0 | 1 | 2 | 3 | 4 | 5 | 6 | … |
|---|---|---|---|---|---|---|---|---|
| 8 × k | 0 | 8 | 16 | 24 | 32 | 40 | 48 | … |
| 8 × k modulo 12 | 0 | 8 | 4 | 0 | 8 | 4 | 0 | … |
Modulo 12, les multiples de 8 ne prennent que trois valeurs : 0, 4 et 8. Ce sont exactement les multiples de 4, et 4 = PGCD(8, 12).
Avec 5 au lieu de 8 :
| k | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 5 × k modulo 12 | 0 | 5 | 10 | 3 | 8 | 1 | 6 | 11 | 4 | 9 | 2 | 7 |
Cette fois, on obtient tous les restes de 0 à 11, chacun une fois. Ce sont les multiples de 1 = PGCD(5, 12).
Et avec 9 : 0, 9, 18 ≡ 6, 27 ≡ 3, 36 ≡ 0… les multiples de 9 modulo 12 sont 0, 3, 6 et 9, les multiples de 3 = PGCD(9, 12).
Pourquoi ? Deux choses sont à montrer.
- Un multiple de a, réduit modulo n, est un multiple de d. Le reste r de a × k dans la division par n s'écrit r = a × k − n × q. Or d divise a et d divise n, donc d divise r.
- Tout multiple de d est atteint. Reprends l'algorithme d'Euclide pour PGCD(8, 12) : 12 = 8 × 1 + 4, donc 4 = 12 − 8 × 1. Chaque reste de l'algorithme s'écrit ainsi comme « un multiple de n plus un multiple de a », et c'est vrai du dernier, d. Modulo n, le multiple de n disparaît : d est congru à un multiple de a. Ici, 4 ≡ −8 ≡ 8 × 11 [12] (vérification : 8 × 11 = 88 = 7 × 12 + 4). Une fois d atteint, ses multiples le sont aussi : 2d ≡ a × 2u, 3d ≡ a × 3u…
Le programme n'exige pas cette démonstration, mais il faut savoir utiliser la propriété, souvent sous la forme d'un parcours circulaire.
Parcourir une liste circulaire par sauts
Une liste circulaire de n éléments est une liste dont le dernier élément est suivi du premier, comme les positions d'un cadran. On la parcourt par sauts d'amplitude constante a : on part de la position 0, puis on avance de a positions à chaque étape, modulo n. Après k sauts, on est en position a × k mod n : les positions visitées sont les multiples de a modulo n.
D'après la propriété :
Exemple. Une équipe de 12 techniciens, numérotés de 0 à 11, assure une astreinte le week-end. Pour ne pas solliciter des voisins de bureau d'affilée, le responsable désigne chaque semaine le technicien situé 8 rangs plus loin que le précédent. Avec des sauts de 8, seuls les techniciens 0, 8 et 4 sont désignés, et toujours les mêmes : PGCD(8, 12) = 4, et 12 ÷ 4 = 3. Avec des sauts de 5, premier avec 12, les 12 techniciens sont désignés à tour de rôle avant que le cycle recommence.
On retrouve ce mécanisme en informatique :
- Tables de hachage à adressage ouvert. Quand la case calculée pour une donnée est occupée, on essaie la case située s positions plus loin, puis encore s plus loin, modulo la taille m de la table. Pour être sûr de trouver une case libre s'il en reste une, il faut que s et m soient premiers entre eux ; c'est l'une des raisons pour lesquelles on choisit souvent une taille m première.
- Parcourir des éléments dans un ordre mélangé sans en oublier ni en répéter : avancer par sauts d'un pas premier avec le nombre d'éléments (pour une playlist, un jeu de questions, une liste de serveurs à tester).
- Engrenages, horloges et calendriers : une roue de 12 dents entraînée par sauts de 8 ne présente que 3 positions.
L'inverse modulo n
Dans la table de multiplication modulo 5 du chapitre 8, chaque ligne non nulle contient un 1 : 2 × 3 ≡ 1 [5]. On dit que 3 est l'inverse de 2 modulo 5.
C'est une conséquence directe de la propriété : 1 est un multiple de a modulo n si et seulement si 1 est un multiple de d = PGCD(a, n), c'est-à-dire si d = 1.
- 7 a un inverse modulo 26, car PGCD(7, 26) = 1 : c'est 15 (7 × 15 = 105 ≡ 1 [26]).
- 9 a un inverse modulo 26 : c'est 3 (9 × 3 = 27 ≡ 1 [26]).
- 13 n'a pas d'inverse modulo 26 : PGCD(13, 26) = 13. Ses multiples modulo 26 ne valent que 0 ou 13.
- Modulo un nombre premier p, tout entier non multiple de p a un inverse.
L'inverse joue le rôle de la division : multiplier par l'inverse de a modulo n revient à « diviser par a » modulo n. C'est ce qui permet de déchiffrer un message codé par chiffrement affine.
Calculer un inverse modulaire
Méthode 1 : essayer les multiples. On calcule a × 1, a × 2, a × 3… modulo n, jusqu'à obtenir 1. Pour l'inverse de 7 modulo 26 :
| c | 1 | 2 | 3 | 4 | … | 14 | 15 |
|---|---|---|---|---|---|---|---|
| 7 × c | 7 | 14 | 21 | 28 | … | 98 | 105 |
| 7 × c mod 26 | 7 | 14 | 21 | 2 | … | 20 | 1 |
C'est exactement l'algorithme demandé au sujet de l'E3 de la session 2026, écrit en pseudo-code :
Fonction inverse(a)
c ← 1
Tant que reste(a × c, 26) ≠ 1 faire
c ← c + 1
Fin Tant que
Renvoyer c
Attention : cet algorithme ne s'arrête jamais si a n'a pas d'inverse. Il faut vérifier avant que PGCD(a, 26) = 1.
Raccourci de tête : cherche parmi 1 + 26 = 27, 1 + 2 × 26 = 53, 1 + 3 × 26 = 79, 1 + 4 × 26 = 105… le premier nombre divisible par a. Pour a = 7 : 27, 53 et 79 ne sont pas divisibles par 7, mais 105 = 7 × 15. L'inverse est 15. Pour a = 9 : 27 = 9 × 3, l'inverse est 3.
Méthode 2 : l'algorithme d'Euclide étendu (complément hors programme, utile pour les grands nombres). On fait l'algorithme d'Euclide, puis on « remonte » les égalités pour écrire 1 comme une combinaison de a et n.
- 26 = 7 × 3 + 5, donc 5 = 26 − 3 × 7
- 7 = 5 × 1 + 2, donc 2 = 7 − 5
- 5 = 2 × 2 + 1, donc 1 = 5 − 2 × 2
En remontant : 1 = 5 − 2 × (7 − 5) = 3 × 5 − 2 × 7 = 3 × (26 − 3 × 7) − 2 × 7 = 3 × 26 − 11 × 7.
Modulo 26, le terme 3 × 26 disparaît : 7 × (−11) ≡ 1 [26]. L'inverse est −11 ≡ −11 + 26 = 15 [26].
Méthode 3 : Python (pour vérifier) : pow(7, -1, 26) renvoie 15 (Python 3.8 et plus). Si l'inverse n'existe pas, Python lève une erreur ValueError.
Les inverses modulo 26, à connaître ou à savoir retrouver vite pour le chiffrement affine. Les 12 entiers de 1 à 25 premiers avec 26 = 2 × 13 sont les nombres impairs différents de 13 :
| a | 1 | 3 | 5 | 7 | 9 | 11 | 15 | 17 | 19 | 21 | 23 | 25 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Inverse de a modulo 26 | 1 | 9 | 21 | 15 | 3 | 19 | 7 | 23 | 11 | 5 | 17 | 25 |
Remarque que les inverses vont par paires (3 et 9, 5 et 21, 7 et 15…) : si a' est l'inverse de a, alors a est l'inverse de a'. Et 25 ≡ −1 [26] est son propre inverse, car (−1) × (−1) = 1.
Résoudre une équation a × x ≡ b [n]
Si a a un inverse a' modulo n, on multiplie les deux membres par a' : x ≡ a' × b [n]. L'équation a une solution unique modulo n.
Exemple : 7x ≡ 3 [26]. L'inverse de 7 est 15, donc x ≡ 15 × 3 = 45 ≡ 19 [26]. Vérification : 7 × 19 = 133 = 5 × 26 + 3.
Même chose avec une équation affine : si y ≡ 7x + 3 [26], alors 7x ≡ y − 3, et x ≡ 15(y − 3) = 15y − 45 ≡ 15y + 7 [26] (car −45 + 52 = 7). C'est la formule de déchiffrement d'un chiffrement affine de clé (7, 3).
Si a n'a pas d'inverse, d = PGCD(a, n) > 1. D'après la propriété, a × x ne prend modulo n que les valeurs multiples de d :
- si b n'est pas un multiple de d, il n'y a aucune solution ;
- si b est un multiple de d, il y a d solutions entre 0 et n − 1.
Exemple : 8x ≡ 4 [12]. PGCD(8, 12) = 4 et 4 est un multiple de 4 : il y a 4 solutions. En essayant : x = 2, 5, 8 ou 11 (8 × 2 = 16 ≡ 4, 8 × 5 = 40 ≡ 4, 8 × 8 = 64 ≡ 4, 8 × 11 = 88 ≡ 4). En revanche, 8x ≡ 6 [12] n'a aucune solution : 6 n'est pas un multiple de 4.
Exercices
Exercice 1 sur 5 Multiples modulo n Réussi À revoir
- Donne les multiples de 6 modulo 15. Combien y en a-t-il ? Relie le résultat à la propriété du cours.
- Sans calcul de tableau, dis combien de valeurs différentes prennent les multiples de 10 modulo 25, et lesquelles.
Voir la réponseMasquer la réponse de l'exercice 1
- 0, 6, 12, 18 ≡ 3, 24 ≡ 9, 30 ≡ 0… Les multiples de 6 modulo 15 sont 0, 3, 6, 9 et 12 : 5 valeurs. PGCD(6, 15) = 3 : ce sont les multiples de 3, et il y en a 15 ÷ 3 = 5.
- PGCD(10, 25) = 5 : les multiples de 10 modulo 25 sont les multiples de 5, 0, 5, 10, 15 et 20, soit 25 ÷ 5 = 5 valeurs.
Tu avais trouvé ?
Exercice 2 sur 5 La table ronde Réussi À revoir
Quinze serveurs d'un cluster sont numérotés de 0 à 14 et disposés en anneau. Un script de vérification part du serveur 0 et teste ensuite, à chaque étape, le serveur situé s positions plus loin dans l'anneau.
- Avec s = 6, quels serveurs sont testés ? Le parcours est-il exhaustif ?
- Avec s = 4, le parcours est-il exhaustif ? Justifie sans lister.
- Donne toutes les valeurs de s entre 1 et 14 qui rendent le parcours exhaustif.
Voir la réponseMasquer la réponse de l'exercice 2
- Positions : 0, 6, 12, 18 ≡ 3, 9, 15 ≡ 0. Les serveurs 0, 6, 12, 3 et 9 sont testés, puis le script recommence : le parcours n'est pas exhaustif. PGCD(6, 15) = 3 et 15 ÷ 3 = 5 serveurs visités.
- PGCD(4, 15) = 1 (15 = 4 × 3 + 3 ; 4 = 3 × 1 + 1 ; 3 = 1 × 3 + 0) : 4 et 15 sont premiers entre eux, le parcours est exhaustif.
- Il faut PGCD(s, 15) = 1, avec 15 = 3 × 5 : s ne doit être multiple ni de 3 ni de 5. s ∈ {1, 2, 4, 7, 8, 11, 13, 14}, soit 8 valeurs.
Tu avais trouvé ?
Exercice 3 sur 5 Inverses Réussi À revoir
- 4 a-t-il un inverse modulo 9 ? Si oui, lequel ?
- 6 a-t-il un inverse modulo 26 ? Justifie.
- Trouve l'inverse de 11 modulo 26 par la méthode de ton choix, et vérifie-le.
- Trouve l'inverse de 3 modulo 11.
Voir la réponseMasquer la réponse de l'exercice 3
- PGCD(4, 9) = 1 : oui. 4 × 7 = 28 = 3 × 9 + 1 : l'inverse est 7.
- PGCD(6, 26) = 2 ≠ 1 : non. Les multiples de 6 modulo 26 sont tous pairs, ils ne valent jamais 1.
- On cherche le premier nombre de la forme 1 + 26k divisible par 11 : 27, 53, 79, 105, 131, 157, 183, 209 = 11 × 19. L'inverse est 19. Vérification : 11 × 19 = 209 = 8 × 26 + 1.
- 3 × 4 = 12 = 11 + 1 : l'inverse est 4.
Tu avais trouvé ?
Exercice 4 sur 5 Équations Réussi À revoir
Résous dans les entiers de 0 à n − 1.
- 5x ≡ 7 [26]
- 9x + 5 ≡ 11 [26]
- 6x ≡ 9 [15]
- 6x ≡ 10 [15]
Voir la réponseMasquer la réponse de l'exercice 4
- L'inverse de 5 modulo 26 est 21. x ≡ 21 × 7 = 147 = 5 × 26 + 17, donc x = 17. Vérification : 5 × 17 = 85 = 3 × 26 + 7.
- 9x ≡ 11 − 5 = 6 [26]. L'inverse de 9 est 3 : x ≡ 3 × 6 = 18 [26]. Vérification : 9 × 18 + 5 = 167 = 6 × 26 + 11.
- PGCD(6, 15) = 3 et 9 est multiple de 3 : 3 solutions. Les multiples de 6 modulo 15 sont 0, 6, 12, 3, 9, 0, 6, 12, 3, 9… pour x = 0, 1, 2, 3, 4, 5… La valeur 9 est atteinte pour x = 4, 9 et 14. Vérification : 6 × 4 = 24 ≡ 9, 6 × 9 = 54 = 45 + 9, 6 × 14 = 84 = 75 + 9.
- 10 n'est pas un multiple de PGCD(6, 15) = 3 : aucune solution.
Tu avais trouvé ?
Exercice 5 sur 5 Compléter un algorithme Réussi À revoir
On veut une fonction inverse(a, n) qui renvoie l'inverse de a modulo n s'il existe, et −1 sinon. Complète les pointillés.
Fonction inverse(a, n)
Si pgcd(a, n) ......... alors
Renvoyer −1
Fin Si
c ← 1
Tant que reste(a × c, n) ......... faire
c ← .........
Fin Tant que
Renvoyer c
Voir la réponseMasquer la réponse de l'exercice 5
Fonction inverse(a, n)
Si pgcd(a, n) ≠ 1 alors
Renvoyer −1
Fin Si
c ← 1
Tant que reste(a × c, n) ≠ 1 faire
c ← c + 1
Fin Tant que
Renvoyer c
Le test sur le PGCD est indispensable : sans lui, la boucle Tant que ne s'arrêterait jamais pour un a sans inverse, puisque reste(a × c, n) ne vaudrait jamais 1. En Python, la version complète est au chapitre 11.
Tu avais trouvé ?