Mathématiques pour l'informatique 201-N11 • Cégep à Montréal
Fiche de révision : l'arithmétique modulaire (201-N11)
L'arithmétique modulaire n'est pas difficile à comprendre : c'est l'arithmétique de l'horloge. Elle est difficile à MANIPULER, parce que trois opérations sur quatre s'y comportent comme d'habitude et que la quatrième, la division, n'existe pas du tout.
Cette fiche est écrite pour les étudiants de cégep en techniques de l'informatique à Montréal et pour tous ceux qui abordent la cryptographie par les mathématiques. La série d'exercices corrigés du même chapitre met ensuite chaque réflexe à l'épreuve.
Marque ici la fiche comme lue ou mets-la en favori : un compte gratuit, sans mot de passe, retient tes fiches lues et tes favoris d'une visite à l'autre, te dit quel chapitre attaquer ensuite et te permet de demander la méthode ou l'exercice qui te manque. Crée ton espace, un courriel suffit.
Le fil du chapitre
Travailler modulo n, c'est remplacer un entier par son reste et calculer sur les restes. L'addition et la multiplication passent sans problème; la DIVISION ne passe jamais, et c'est de là que viennent presque toutes les pertes de points.
Division euclidienne : le reste est TOUJOURS positif
•Pour n>0, il existe un unique couple (q;r) tel que a=nq+r avec 0≤r<n.
•Cela vaut aussi pour a<0 : −17=5×(−4)+3, donc −17mod5=3, et non −2.
•L'opérateur % des langages C, C++ et Java ne suit PAS cette convention et rend un reste du signe du dividende. Python, lui, la suit.
•Le quotient se lit comme la partie entière PAR DÉFAUT de na : ⌊5−17⌋=−4, pas −3.
La division euclidienne de −17 par 5 donne q=−4 et r=3, jamais r=−2 : le reste se compte à partir du multiple situé À GAUCHE, donc il est toujours positif.
En examen, un reste négatif est une réponse fausse même quand la calculatrice l'affiche. Ajouter le module jusqu'à retomber dans [0;n−1] coûte cinq secondes.
Congruences : ce qui passe, et ce qui ne passe pas
•a≡b(modn) signifie que n divise a−b, autrement dit que a et b ont le même reste.
•COMPATIBLE avec l'addition, la soustraction, la multiplication et donc les puissances : on réduit AVANT de calculer, jamais après.
•PAS compatible avec la division : ba(modn) n'a aucun sens en général.
•SIMPLIFICATION : de ac≡bc(modn) on ne peut tirer a≡b(modn) que si pgcd(c,n)=1. Sinon il faut diviser le module par pgcd(c,n).
Modulo 5, la roue n'a que cinq positions : −3, 2, 7 et 12 tombent au même endroit, ils sont congrus entre eux, de même reste 2.
Réduire avant de calculer est aussi ce qui rend les calculs faisables : 750mod13 se fait de tête en réduisant à chaque étape, et sature la calculatrice si l'on calcule 750 d'abord.
Euclide, Bézout, inverse : la même machine à trois usages
•EUCLIDE : pgcd(a,n)=pgcd(n,amodn), répété jusqu'à un reste nul. Le nombre d'étapes est majoré par environ cinq fois le nombre de chiffres.
•BÉZOUT : il existe u et v tels que au+nv=pgcd(a,n), obtenus en remontant l'algorithme d'Euclide ÉTENDU.
•INVERSE : a est inversible modulo n si et seulement si pgcd(a,n)=1, et l'inverse est alors le u de Bézout, réduit dans [0;n−1].
•Tous les éléments non nuls sont inversibles SI ET SEULEMENT SI n est premier. Sinon apparaissent des DIVISEURS DE ZÉRO, comme 2×3≡0(mod6).
L'algorithme d'Euclide pave le rectangle 48×18 par des carrés : 48=2×18+12, puis 18=1×12+6, puis 12=2×6. Le côté du dernier carré est le PGCD, ici 6.
Fermat, exponentiation rapide et équations de congruence
•FERMAT : si p est PREMIER et ne divise pas a, alors ap−1≡1(modp).
•Conséquence pratique : on réduit la BASE modulo p et l'EXPOSANT modulo p−1. Deux modules différents, c'est le piège du chapitre.
•EXPONENTIATION RAPIDE : aemodn en environ 2log2e multiplications, en élevant au carré et en réduisant à chaque étape.
•ÉQUATION ax≡b(modn) : elle admet des solutions si et seulement si d=pgcd(a,n) divise b, et il y en a alors exactement d modulo n.
Par carrés successifs, 78 modulo 13 demande trois multiplications, réduites à chaque étape : on ne manipule jamais un nombre plus grand que 122.
Sur un module non premier, c'est le théorème d'Euler qui remplace Fermat, avec φ(n) à la place de p−1. Appliquer Fermat tel quel à un module composé est faux.
Les pièges qui coûtent des points
Les erreurs ci-dessous sont celles que je corrige le plus souvent en séance. Chacune coûte des points sur une copie, même quand le raisonnement est juste.
1.Rendre un reste négatif
1 point à chaque occurrence, et un chiffrement faux dans un problème RSA
Ce qu'il ne faut pas écrire
« −17mod5=−2, c'est ce que ma calculatrice affiche. »
Ce qu'il faut écrire
« −17=5×(−4)+3, donc −17mod5=3 : le reste d'une division euclidienne appartient toujours à [0;n−1]. »
Pourquoi : L'opérateur % des langages de la famille C rend un reste du signe du dividende, ce qui n'est pas la définition mathématique. En Python et en mathématiques, le reste est positif.
2.Simplifier une congruence par un facteur non premier avec le module
toute la question
Ce qu'il ne faut pas écrire
« 4×2≡4×5(mod6), donc 2≡5(mod6). »
Ce qu'il faut écrire
« pgcd(4;6)=2=1 : on ne simplifie pas. On divise le MODULE par 2 et l'on obtient 2≡5(mod3), qui est vrai. »
Pourquoi : Modulo 6, 8 et 20 ont bien le même reste 2, alors que 2 et 5 ne sont pas congrus : la simplification perd de l'information dès que le facteur partage un diviseur avec le module.
3.Diviser dans une congruence
1 point ici, toute la question dès que le résultat n'est pas entier
Ce qu'il ne faut pas écrire
« 3x≡6(mod7), donc x≡36=2. »
Ce qu'il faut écrire
« On MULTIPLIE par l'inverse de 3 modulo 7, qui est 5 puisque 3×5=15≡1 : x≡5×6=30≡2(mod7). »
Pourquoi : La division n'existe pas modulo n. Le raccourci fonctionne par hasard quand le quotient tombe juste, et il s'effondre dès que ce n'est pas le cas : 3x≡5(mod7) n'a rien à voir avec 35.
4.Réduire l'exposant modulo p au lieu de p−1
toute la question
Ce qu'il ne faut pas écrire
« 3100mod7 : je réduis 100 modulo 7, ce qui donne 2, donc 32=9≡2. »
Ce qu'il faut écrire
« La base se réduit modulo 7, l'EXPOSANT modulo 7−1=6. Comme 100=6×16+4, on a 3100≡34=81≡4(mod7). »
Les puissances 3kmod7 reprennent à l'identique tous les SIX pas, et 6=7−1 : c'est le petit théorème de Fermat. L'exposant se réduit donc modulo p−1, la base modulo p.
Pourquoi : Le petit théorème de Fermat dit ap−1≡1, donc c'est la période p−1 qui gouverne l'exposant. Deux modules cohabitent dans le même calcul, et les confondre donne un résultat plausible et faux.
5.Croire que tout élément non nul est inversible
toute la question, et un calcul qui ne peut pas aboutir
Ce qu'il ne faut pas écrire
« Modulo 6, je cherche l'inverse de 2 pour résoudre 2x≡4. »
Ce qu'il faut écrire
« pgcd(2;6)=2=1 : 2 n'est PAS inversible modulo 6. C'est même un diviseur de zéro, puisque 2×3≡0(mod6). »
Modulo 6, les cases rouges sont des produits NULS de facteurs non nuls : 2, 3 et 4 sont des diviseurs de zéro, et n'ont pas d'inverse.
Pourquoi : L'inversibilité modulo n est exactement la primalité avec n. Sur un module composé, une partie des éléments n'a pas d'inverse, et l'équation se résout alors par la condition de Bézout, pas par un inverse.
6.Appliquer Fermat sans vérifier ses deux hypothèses
toute la question, et une conclusion fausse en cryptographie
Ce qu'il ne faut pas écrire
« an−1≡1(modn) pour tout a et tout n. »
Ce qu'il faut écrire
« Le théorème demande n PREMIER et n ne divisant pas a. Modulo 6, qui n'est pas premier, 25=32≡2 et non 1. »
Pourquoi : Sur un module composé, c'est le théorème d'Euler qui s'applique, avec φ(n) à la place de p−1. Utiliser Fermat hors de son cadre donne un résultat qui ressemble à une réponse.
7.Calculer la puissance entière avant de réduire
le temps de l'épreuve, et une calculatrice qui sature
Ce qu'il ne faut pas écrire
« 750mod13 : je calcule 750, puis je divise par 13. »
Ce qu'il faut écrire
« Je réduis à CHAQUE étape : 72=49≡10, 74≡102=100≡9, et ainsi de suite par élévations au carré successives. »
Pourquoi : 750 a plus de quarante chiffres : aucune calculatrice d'examen ne le rend exactement, et l'arrondi rend le reste faux. La compatibilité de la congruence avec la multiplication existe précisément pour éviter cela.
8.Annoncer une seule solution à une équation de congruence
la moitié des points de la question
Ce qu'il ne faut pas écrire
« 14x≡30(mod100) : je trouve x≡45, c'est la solution. »
Ce qu'il faut écrire
« d=pgcd(14;100)=2 divise 30, donc il y a exactement DEUX solutions modulo 100 : x≡45 et x≡95. »
14x≡30(mod100) a d=2 solutions : 45 et 95, séparées de 2100=50.
Pourquoi : Le nombre de solutions modulo n vaut d=pgcd(a,n) dès que d divise b. Résoudre l'équation réduite donne une solution modulo dn, qu'il faut ensuite déplier en d solutions modulo n.
Quelle méthode choisir
Ce qu'on a le droit de faire dans une congruence
Avant chaque manipulation, on regarde de quelle opération il s'agit. Trois sont libres, une est interdite, deux sont conditionnelles.
Si addition, soustraction, multiplication → libre : on réduit chaque terme AVANT de calculer
Exemple : 17×23≡2×3=6(mod5)
Si élévation à une puissance, module quelconque → libre sur la BASE, en réduisant à chaque carré; l'exposant, lui, ne se réduit pas sans hypothèse
Exemple : 74≡102≡9(mod13)
Si réduction de l'EXPOSANT, module premier p ne divisant pas a → autorisée modulo p−1, par le petit théorème de Fermat
Exemple : 3100≡34≡4(mod7)
Sur un module composé, remplacer p−1 par φ(n) et vérifier que pgcd(a,n)=1.
Si simplification d'un facteur commun c → autorisée seulement si pgcd(c,n)=1; sinon diviser AUSSI le module par pgcd(c,n)
Exemple : 4×2≡4×5(mod6) donne 2≡5(mod3)
Si division → INTERDITE. On multiplie par l'inverse, qui n'existe que si pgcd(a,n)=1
Exemple : 3x≡6(mod7) se résout par ×5, pas par ÷3
Quand l'inverse n'existe pas, l'équation n'est pas forcément insoluble : elle a pgcd(a,n) solutions dès que ce PGCD divise le second membre. C'est le cas le plus fréquent en examen.
Quel outil selon ce que l'énoncé demande
Les questions du chapitre se ramènent à six formes, et chacune a un outil unique. On l'identifie avant d'écrire la première ligne.
Si « quel est le reste de », « quel jour de la semaine » → division euclidienne, puis réduction du calcul modulo n
Exemple : 21000mod7 par la périodicité
Si « calculer pgcd(a,b) » → algorithme d'Euclide, en tableau de restes successifs
Exemple : pgcd(48;18)=6 en trois divisions
Si « trouver u et v tels que au+nv=d » → algorithme d'Euclide ÉTENDU, en remontant les égalités
Exemple : 50−7×7=1 donne u=−7
Si « l'inverse de a modulo n » → vérifier pgcd(a,n)=1, puis Bézout : l'inverse est u réduit dans [0;n−1]
Exemple : l'inverse de 7 modulo 50 est −7≡43
Si « résoudre ax≡b(modn) » → calculer d=pgcd(a,n); si d∤b, aucune solution; sinon diviser tout par d, inverser, puis déplier en d solutions
Exemple : 14x≡30(mod100) donne x≡45 et x≡95
Si « un exposant énorme » → Fermat pour réduire l'exposant, puis exponentiation rapide pour finir
Exemple : 3100mod7 se ramène à 34
Toutes ces questions commencent par le même geste : calculer un PGCD. C'est lui qui décide si l'inverse existe, combien de solutions l'équation possède, et si Fermat s'applique.
La rédaction attendue
Le correcteur coche des étapes. Les voici dans l'ordre, avec la phrase de conclusion qu'il attend mot pour mot.
Calculer un inverse modulaire par Euclide étendu
Quand l'utiliser : L'énoncé demande l'inverse de a modulo n, ou une résolution qui en dépend.
1Vérifier l'existence AVANT de calculer : « pgcd(7;50)=1, donc 7 est inversible modulo 50. »
2Dérouler l'algorithme d'Euclide en écrivant chaque division : « 50=7×7+1, puis 7=1×7+0. »
3Remonter pour isoler le PGCD : « 1=50−7×7. »
4Lire l'identité de Bézout modulo n : « donc −7×7≡1(mod50). »
5Réduire le coefficient dans [0;n−1] et VÉRIFIER : « −7≡43, et 7×43=301=6×50+1. »
Phrase de conclusion
L'inverse de 7 modulo 50 est 43, puisque 7×43=301≡1(mod50).
Le piège : Rendre un coefficient de Bézout négatif comme inverse. Il est juste, mais un inverse s'écrit dans [0;n−1], et la vérification finale par multiplication est le seul moyen de s'assurer qu'on n'a pas inversé u et v.
Barème : En général 1 point pour la vérification du PGCD, 1 point pour l'algorithme déroulé, 1 point pour la remontée, 1 point pour l'inverse réduit et vérifié.
Résoudre une équation de congruence ax≡b(modn)
Quand l'utiliser : Toute équation linéaire modulo n, y compris déguisée en problème de clé de contrôle ou de calendrier.
1Calculer d=pgcd(a,n) et TRANCHER : « d=2 divise 30, donc il y a des solutions, exactement 2 modulo 100. »
2Diviser les trois quantités par d, le module compris : « 7x≡15(mod50). »
3Calculer l'inverse de da modulo dn par Euclide étendu.
4Multiplier et réduire : « x≡43×15≡45(mod50). »
5DÉPLIER les d solutions modulo n en ajoutant dn, puis vérifier chacune dans l'équation de départ.
Phrase de conclusion
L'équation 14x≡30(mod100) admet exactement deux solutions, x≡45(mod100) et x≡95(mod100).
Le piège : Oublier de diviser le MODULE en même temps que les deux membres. On obtient alors 7x≡15(mod100), dont la solution vérifie bien l'équation de départ mais laisse échapper l'autre : on perd des solutions.
Barème : 1 point pour la condition d'existence, 1 point pour la division par d module compris, 1 point pour l'inverse, 1 point pour le dépliage des d solutions.
Vérifier avant de rendre
Cinq minutes de vérification récupèrent plus de points qu'un exercice de plus commencé à la hâte.
Vérifier que le reste est dans [0;n−1]
Relire chaque reste écrit sur la copie : un nombre négatif ou supérieur ou égal au module est une faute, quelle que soit la calculatrice qui l'a produit.
Un −2 modulo 5 se corrige en ajoutant 5, ce qui donne 3. Un 7 modulo 5 se corrige en retranchant 5, ce qui donne 2.
Vérifier un inverse en multipliant
Multiplier a par l'inverse trouvé et réduire : le résultat doit valoir exactement 1. C'est immédiat et cela attrape toutes les erreurs de la remontée de Bézout.
7×43=301=6×50+1 : correct. Si l'on avait rendu −7 sans le réduire, la vérification passerait aussi, mais l'écriture serait refusée.
Vérifier Bézout en recalculant la combinaison
Reporter u et v dans au+nv et comparer au PGCD annoncé. Une erreur de signe se voit immédiatement, et c'est l'erreur la plus fréquente de la remontée.
7×(−7)+50×1=−49+50=1 : conforme au PGCD. Un résultat de 7×7+50×1=99 signalerait que le signe de u a été perdu.
Vérifier une puissance par la périodicité
Calculer les premières puissances de la base et repérer le rang où l'on retombe sur 1. Ce rang divise p−1 et permet de recalculer le résultat autrement.
Les puissances de 3 modulo 7 donnent 3, 2, 6, 4, 5 puis 1 : la période est 6, donc 3100=396×34≡34≡4.
L'exercice type décortiqué
Résoudre 14x≡30(mod100), jusqu'aux deux solutions
Résoudre dans Z l'équation de congruence 14x≡30(mod100).
On précisera le nombre exact de solutions modulo 100 et l'on vérifiera chacune.
Étape 1
pgcd(14;100) : 100=7×14+2, puis 14=7×2+0, donc d=2. Comme 2 divise 30, l'équation a des solutions, et il y en a exactement d=2 modulo 100.
Pourquoi
Cette première ligne décide de tout : elle dit s'il y a des solutions et combien. Une copie qui la saute peut trouver la bonne valeur et perdre quand même la moitié des points, faute d'avoir compté.
Étape 2
On divise les DEUX membres et le MODULE par d=2 : 7x≡15(mod50).
Pourquoi
Le module se divise lui aussi, sans quoi l'équation obtenue n'est pas équivalente. C'est cet oubli qui fait perdre des solutions.
Étape 3
pgcd(7;50)=1, donc 7 est inversible modulo 50. Euclide : 50=7×7+1, donc 1=50−7×7 et −7×7≡1(mod50).
Pourquoi
On vérifie l'inversibilité avant de chercher l'inverse. Après la division par d, elle est garantie, mais l'écrire vaut le point de rigueur et prouve que la condition a été comprise.
Étape 4
L'inverse de 7 modulo 50 est donc −7≡43. Contrôle : 7×43=301=6×50+1.
Pourquoi
On réduit dans [0;49] et l'on vérifie par multiplication. Ces deux gestes prennent dix secondes et éliminent la totalité des erreurs de signe de la remontée.
Étape 5
On multiplie l'équation par 43 : x≡43×15=645(mod50), et 645=12×50+45, donc x≡45(mod50).
Pourquoi
On multiplie, on ne divise jamais. Le résultat est ici une congruence modulo 50, pas modulo 100 : la question n'est pas encore terminée, et c'est le moment où la moitié des copies s'arrête.
Étape 6
On déplie modulo 100 : x≡45 et x≡45+50=95. Ce sont bien d=2 solutions, comme annoncé à la première ligne.
Pourquoi
Le dépliage consiste à ajouter dn autant de fois que nécessaire. Le compte annoncé au début sert ici de contrôle : deux solutions attendues, deux solutions obtenues.
Étape 7
Vérification : 14×45=630=6×100+30 et 14×95=1330=13×100+30. Les deux valeurs conviennent.
Pourquoi
On réinjecte chaque solution dans l'équation de DÉPART, pas dans l'équation réduite. Cette vérification attrape les fautes de calcul ; une solution manquante, seul le décompte de la première ligne la révèle.
Conclusion rédigée
L'équation 14x≡30(mod100) admet exactement deux solutions modulo 100 : x≡45 et x≡95.
L'erreur classique sur cet exercice : Diviser seulement les deux membres et garder le module : 7x≡15(mod100). L'inverse de 7 modulo 100 vaut 43 également, et l'on obtient x≡45(mod100), donc une seule solution au lieu de deux. La vérification sur l'équation de départ ne révèle rien, puisque 45 convient : seule la condition sur le PGCD signale la solution manquante.
À savoir par cœur
•Le reste d'une division euclidienne est TOUJOURS dans [0;n−1], même pour un dividende négatif.
•On réduit AVANT de calculer : la congruence passe l'addition et la multiplication, jamais la division.
•ac≡bc(modn) donne a≡b seulement si pgcd(c,n)=1; sinon on divise aussi le module.
•a est inversible modulo n si et seulement si pgcd(a,n)=1, et l'inverse est le u de Bézout.
•Tous les non nuls sont inversibles si et seulement si n est PREMIER; sinon il y a des diviseurs de zéro.
•Fermat : p premier et p∤a donnent ap−1≡1(modp). Base modulo p, EXPOSANT modulo p−1.
•ax≡b(modn) a des solutions si et seulement si pgcd(a,n) divise b, et il y en a alors exactement pgcd(a,n).
•Tout commence par un PGCD : il décide de l'inverse, du nombre de solutions et de l'usage de Fermat.
Questions fréquentes
Le reste d'une division peut-il être négatif ?
Non, jamais en mathématiques : la division euclidienne impose un reste compris entre zéro et le module moins un. Moins dix-sept modulo cinq vaut donc trois, et non moins deux. L'opérateur pourcent des langages C, C plus plus et Java rend pourtant un reste négatif dans ce cas, contrairement à Python : c'est une convention de programmation, pas une définition.
Peut-on simplifier une congruence par un facteur commun ?
Seulement si ce facteur est premier avec le module. Sinon, on divise aussi le module par le plus grand commun diviseur du facteur et du module. Par exemple quatre fois deux et quatre fois cinq sont congrus modulo six, alors que deux et cinq ne le sont pas : ils ne le deviennent que modulo trois.
Comment calculer un inverse modulaire ?
On vérifie d'abord que le nombre est premier avec le module, sans quoi l'inverse n'existe pas. On déroule ensuite l'algorithme d'Euclide, puis on remonte les égalités pour écrire un égale a fois u plus n fois v. Le coefficient u est l'inverse, qu'on réduit entre zéro et le module moins un, puis qu'on vérifie par multiplication.
Comment calculer une très grande puissance modulo n ?
On ne calcule jamais la puissance entière. Si le module est premier et ne divise pas la base, le petit théorème de Fermat permet de réduire l'exposant modulo le module moins un. On termine par l'exponentiation rapide, qui élève au carré et réduit à chaque étape, en environ deux fois le logarithme en base deux de l'exposant multiplications.
Combien de solutions a une équation de congruence ?
Elle en a exactement autant que le plus grand commun diviseur du coefficient et du module, à condition que ce diviseur divise aussi le second membre; sinon elle n'en a aucune. On divise alors les deux membres et le module par ce diviseur, on résout, puis on déplie la solution obtenue en ajoutant le module réduit.
Passer à la pratique
Exercices corrigés : L'arithmétique modulaire
Une méthode se prouve sur une copie, pas sur une fiche. La série du même chapitre reprend chacun de ces pièges dans un exercice, avec le corrigé rédigé étape par étape.
Il manque quelque chose dans cette fiche ?Une méthode, un piège, un exercice pour l'appliquer, une erreur repérée : dis-le-moi, je lis chaque demande.
L'envoi passe par ton espace gratuit : c'est ce qui me permet de te répondre et de te prévenir quand l'exercice est ajouté. Un courriel suffit, pas de mot de passe. Crée ton espace.
Pas envie de créer un compte ? Écris-moi directement.
Vous cherchez un tuteur en mathématiques pour l'informatique 201-N11 à Montréal ?
Contactez-moi pour une première séance. On travaille l'arithmétique modulaire au niveau réel des évaluations, des congruences jusqu'à l'algorithme d'Euclide étendu et à RSA.