Mathématiques pour l'informatique 201-N11 • Cégep à Montréal

Exercices corrigés : l'arithmétique modulaire (201-N11)

Voici la série d'exercices corrigés de mathématiques pour l'informatique 201-N11 sur l'arithmétique modulaire : division euclidienne, congruences, PGCD, inverse modulaire, théorème de Fermat et applications à la cryptographie. C'est le chapitre qui relie l'arithmétique élémentaire aux outils réellement employés en informatique.

Les exercices 0.1 et 0.2 ouvrent la série par deux listes de calcul direct, comme dans les manuels : neuf restes à calculer modulo nn, d'un entier négatif comme −38 mod 7-38\bmod 7 à une somme et un produit réduits terme à terme, jusqu'au dernier chiffre de 7837^{83} par le cycle des puissances et à 2405 mod 132^{405}\bmod 13 par le petit théorème de Fermat, plus un PGCD par l'algorithme d'Euclide ; puis huit inverses modulaires et congruences à résoudre, de l'inverse de 55 modulo 1111 aux coefficients de Bézout par l'algorithme d'Euclide étendu et à l'équation 8x≡12(mod28)8x\equiv 12\pmod{28} et ses quatre solutions. Chaque ligne a sa valeur à trouver, vérifiée en direct.

Le fil de la série tient en une phrase : on ne s'intéresse plus au quotient mais au RESTE, et calculer sur les restes est légitime parce que la congruence est compatible avec l'addition et la multiplication. Tout le reste, des clés de contrôle jusqu'à RSA, découle de cette compatibilité et de son unique exception, la division.

La partie A construit les outils, de la division euclidienne jusqu'aux équations de congruence. La partie B les assemble : Bézout, Fermat, exponentiation rapide, puis deux applications complètes, la clé de contrôle d'un code ISBN et un chiffrement RSA mené de bout en bout. Tous les corrigés sont sur la page, avec le code Python des algorithmes.

Cette série existe aussi en anglais →

Série autocorrigée Tape tes réponses et vérifie-les question par question : la page te dit juste ou faux avant d'ouvrir la correction. Avec un compte, chaque bonne réponse du premier coup rapporte des points, et tes réponses justes restent remplies quand tu reviens.

Ce chapitre fait partie de Mathématiques pour l'informatique, 201-N11
Avant de commencer Fiche de révision : les pièges et la méthode de ce chapitre

Avant ce chapitre

Ces notions sont supposées acquises ici. Si le premier exercice résiste, le blocage vient presque toujours de l'une d'elles, pas du chapitre lui-même.

Rappel de cours

  • • DIVISION EUCLIDIENNE : pour n>0n>0, il existe un unique couple (q,r)(q,r) avec a=nq+ra=nq+r et 0≤r<n0\leq r<n. Le reste est TOUJOURS positif, y compris pour a<0a<0 : −17 mod 5=3-17\bmod 5=3. Attention, l'opérateur des langages C et Java ne suit pas cette convention.
  • • CONGRUENCES : a≡b(modn)a\equiv b\pmod n signifie que nn divise a−ba-b, ou que aa et bb ont le même reste. La relation est compatible avec l'ADDITION et la MULTIPLICATION, donc on réduit AVANT de calculer. Elle n'est PAS compatible avec la division.
  • • SIMPLIFICATION : ac≡bc(modn)ac\equiv bc\pmod n n'entraîne a≡b(modn)a\equiv b\pmod n que si pgcd(c,n)=1\mathrm{pgcd}(c,n)=1. Sinon, le module doit être divisé par pgcd(c,n)\mathrm{pgcd}(c,n).
  • • EUCLIDE : pgcd(a,n)=pgcd(n,a mod n)\mathrm{pgcd}(a,n)=\mathrm{pgcd}(n,a\bmod n), ce qui donne l'algorithme. Nombre d'étapes majoré par environ 5 fois le nombre de chiffres, pire cas atteint sur deux nombres de Fibonacci consécutifs.
  • • BÉZOUT : il existe uu et vv tels que au+nv=pgcd(a,n)au+nv=\mathrm{pgcd}(a,n), calculables par l'algorithme d'Euclide ÉTENDU. Si le PGCD vaut 1, alors uu est l'inverse de aa modulo nn.
  • • INVERSE : aa est inversible modulo nn si et seulement si pgcd(a,n)=1\mathrm{pgcd}(a,n)=1. Tous les éléments non nuls sont inversibles si et seulement si nn est PREMIER. Sinon apparaissent des DIVISEURS DE ZÉRO.
  • • ÉQUATION ax≡b(modn)ax\equiv b\pmod n : elle a des solutions si et seulement si pgcd(a,n)\mathrm{pgcd}(a,n) divise bb, et il y en a alors exactement pgcd(a,n)\mathrm{pgcd}(a,n) modulo nn.
  • • FERMAT : si pp est premier et ne divise pas aa, alors ap−1≡1(modp)a^{p-1}\equiv 1\pmod p. On réduit donc la BASE modulo pp et l'EXPOSANT modulo p−1p-1. L'EXPONENTIATION RAPIDE calcule ae mod na^{e}\bmod n en environ 2log⁡2e2\log_{2}e multiplications.

Calculs : les restes à calculer

Exercice 0.1 : Réduire modulo n : dix calculs directs

Pour chaque ligne, donnez le reste rr demandé, avec 0≤r<n0\leq r<n, ou le PGCD à la dernière ligne. La calculatrice ne sert à rien : tous les nombres se réduisent à la main.

Une seule méthode : réduire AVANT de calculer. On remplace chaque nombre par son reste, terme par terme dans une somme, facteur par facteur dans un produit ; pour une puissance, on cherche le premier exposant qui ramène à 11, par le cycle des puissances ou par le petit théorème de Fermat quand le module est premier, puis on réduit l'exposant. Un reste négatif n'existe pas : on ajoute nn jusqu'à tomber dans [0 ;n[[0\,;n[.

  • a) 347 mod 9347\bmod 9.
  • b) −38 mod 7-38\bmod 7.
  • c) (482+937+615) mod 8(482+937+615)\bmod 8, en réduisant chaque terme.
  • d) (123×456) mod 11(123\times 456)\bmod 11, en réduisant chaque facteur.
  • e) Le reste de n3+2nn^{3}+2n modulo 44, sachant que n≡3(mod4)n\equiv 3\pmod 4.
  • f) 2 9992 mod 112\,999^{2}\bmod 11.
  • g) 441 mod 94^{41}\bmod 9, par le cycle des puissances de 44.
  • h) Le dernier chiffre de 7837^{83}, c'est-à-dire 783 mod 107^{83}\bmod 10.
  • i) 2405 mod 132^{405}\bmod 13, par le petit théorème de Fermat.
  • j) Le PGCD de 1 5181\,518 et de 391391, par l'algorithme d'Euclide.

Tape tes réponses, la page te dit juste ou faux 0/10

a)
b)
c)
d)
e)
f)
g)
h)
i)
j)
Voir la correction

Réponses

  • a) 347=9×38+5347=9\times 38+5 ; 55
  • b) −38=7×(−6)+4-38=7\times(-6)+4 ; 44
  • c) 2+1+7≡22+1+7\equiv 2 ; 22
  • d) 2×5=102\times 5=10 ; 1010
  • e) 27+6=33≡127+6=33\equiv 1 ; 11
  • f) 72=49≡57^{2}=49\equiv 5 ; 55
  • g) 43≡14^{3}\equiv 1, 441≡424^{41}\equiv 4^{2} ; 77
  • h) cycle de longueur 44, 783≡737^{83}\equiv 7^{3} ; 33
  • i) 212≡12^{12}\equiv 1, 2405≡292^{405}\equiv 2^{9} ; 55
  • j) dernier reste non nul ; 2323

Le geste qui décide de tout : réduire avant de multiplier ou d'élever à une puissance. La congruence est compatible avec la somme, le produit et donc la puissance : on a le droit de remplacer chaque nombre par son reste à toute étape, et l'on n'a JAMAIS à écrire 2 99922\,999^{2} ni 24052^{405}.

a)

347=9×38+5347=9\times 38+5, donc 347 mod 9=5347\bmod 9=5. Vérification : 9×38=3429\times 38=342 et 342+5=347342+5=347.

b)

Il faut un quotient qui laisse un reste dans [0 ;7[[0\,;7[ : −38=7×(−6)+4-38=7\times(-6)+4, donc −38 mod 7=4-38\bmod 7=4. Piège : −38=7×(−5)−3-38=7\times(-5)-3 donne −3-3, qui n'est pas un reste ; on ajoute 77 et l'on retrouve 44.

c)

482=8×60+2482=8\times 60+2, 937=8×117+1937=8\times 117+1 et 615=8×76+7615=8\times 76+7. La somme est donc congrue à 2+1+7=10≡2(mod8)2+1+7=10\equiv 2\pmod 8. Vérification : 482+937+615=2 034=8×254+2482+937+615=2\,034=8\times 254+2.

d)

123=11×11+2123=11\times 11+2 et 456=11×41+5456=11\times 41+5, donc 123×456≡2×5=10(mod11)123\times 456\equiv 2\times 5=10\pmod{11}. Le reste vaut 1010, sans avoir calculé 56 08856\,088.

e)

On remplace nn par son reste 33 : 33+2×3=27+6=33=4×8+13^{3}+2\times 3=27+6=33=4\times 8+1, donc le reste vaut 11, quel que soit l'entier n≡3(mod4)n\equiv 3\pmod 4. Contrôle sur n=7n=7 : 343+14=357=4×89+1343+14=357=4\times 89+1.

f)

2 999=11×272+72\,999=11\times 272+7, donc 2 9992≡72=49=44+5≡5(mod11)2\,999^{2}\equiv 7^{2}=49=44+5\equiv 5\pmod{11}. Piège : élever d'abord au carré, ce qui oblige à diviser 8 994 0018\,994\,001 par 1111.

g)

Le cycle : 41≡44^{1}\equiv 4, 42=16≡74^{2}=16\equiv 7, 43≡4×7=28≡1(mod9)4^{3}\equiv 4\times 7=28\equiv 1\pmod 9. Il a pour longueur 33, et 41=3×13+241=3\times 13+2, donc 441=(43)13×42≡1×7=7(mod9)4^{41}=\left(4^{3}\right)^{13}\times 4^{2}\equiv 1\times 7=7\pmod 9. Piège : réduire l'exposant modulo 99, le module, au lieu de la longueur du cycle.

h)

Le cycle modulo 1010 : 77, 49≡949\equiv 9, 9×7=63≡39\times 7=63\equiv 3, 3×7=21≡13\times 7=21\equiv 1, de longueur 44. Comme 83=4×20+383=4\times 20+3, 783≡73≡3(mod10)7^{83}\equiv 7^{3}\equiv 3\pmod{10} : le dernier chiffre est 33.

i)

1313 est premier et ne divise pas 22, donc 212≡1(mod13)2^{12}\equiv 1\pmod{13}. Or 405=12×33+9405=12\times 33+9, donc 2405≡29=512=13×39+5≡5(mod13)2^{405}\equiv 2^{9}=512=13\times 39+5\equiv 5\pmod{13}. Piège : réduire l'exposant modulo 1313 au lieu de 13−1=1213-1=12, ce qui donne 405≡2405\equiv 2 et un faux 44.

j)

1 518=3×391+3451\,518=3\times 391+345 ; 391=1×345+46391=1\times 345+46 ; 345=7×46+23345=7\times 46+23 ; 46=2×23+046=2\times 23+0. Le dernier reste non nul est 2323, donc le PGCD vaut 2323. Contrôle : 1 518=23×661\,518=23\times 66 et 391=23×17391=23\times 17.

Contrôle : un reste se vérifie en recalculant nq+rnq+r, et il doit tomber dans [0 ;n[[0\,;n[ ; un cycle de puissances se vérifie en constatant qu'il revient bien sur 11 avant de s'en servir pour réduire l'exposant.

Coche ici les exercices faits ou à revoir : un compte gratuit, sans mot de passe, retient tes coches et tes réponses justes d'une visite à l'autre, te dit quel chapitre attaquer ensuite et te permet de demander l'exercice qui te manque. Crée ton espace, un courriel suffit.

Calculs : les inverses et les congruences à résoudre

Exercice 0.2 : Inverser et résoudre modulo n : huit calculs directs

Pour chaque ligne, donnez l'inverse, la solution ou le nombre demandé. Un inverse et une solution s'écrivent comme un reste, entre 00 et n−1n-1.

Une seule méthode : calculer d'abord pgcd(a,n)\mathrm{pgcd}(a,n), sans quoi on ne sait pas si l'inverse existe ; trouver ensuite l'inverse par l'algorithme d'Euclide étendu, ou par essais quand nn est petit ; enfin, pour résoudre ax≡b(modn)ax\equiv b\pmod n, multiplier les deux membres par l'inverse de aa. Si d=pgcd(a,n)>1d=\mathrm{pgcd}(a,n)>1, l'équation n'a de solution que si dd divise bb : on divise alors tout par dd, module compris, et l'on obtient dd solutions modulo nn.

  • a) L'inverse de 55 modulo 1111.
  • b) L'inverse de 44 modulo 1515.
  • c) L'inverse de 99 modulo 2424 existe-t-il ?
  • d) L'inverse de 2323 modulo 6060, par l'algorithme d'Euclide étendu.
  • e) Les coefficients de Bézout uu et vv tels que 75u+32v=175u+32v=1, avec 0<u<320<u<32.
  • f) La solution de 5x≡3(mod17)5x\equiv 3\pmod{17}.
  • g) La solution de 7x≡5(mod18)7x\equiv 5\pmod{18}.
  • h) L'équation 8x≡12(mod28)8x\equiv 12\pmod{28} : le nombre de solutions modulo 2828, puis la plus petite solution positive.

Tape tes réponses, la page te dit juste ou faux 0/10

a)
b)
c)
d)
e)
f)
g)
h)
Voir la correction

Réponses

  • a) 5×9≡1(mod11)5\times 9\equiv 1\pmod{11} ; 99
  • b) 4×4≡1(mod15)4\times 4\equiv 1\pmod{15} ; 44
  • c) pgcd(9,24)=3\mathrm{pgcd}(9,24)=3 ; non
  • d) 1=5×60−13×231=5\times 60-13\times 23 ; 4747
  • e) 1=3×75−7×321=3\times 75-7\times 32 ; u=3u=3, v=−7v=-7
  • f) x≡7×3x\equiv 7\times 3 ; x=4x=4
  • g) x≡13×5x\equiv 13\times 5 ; x=11x=11
  • h) 2x≡3(mod7)2x\equiv 3\pmod 7 ; 44 solutions, la plus petite 55

Le geste qui décide de tout : le PGCD AVANT tout calcul. pgcd(a,n)=1\mathrm{pgcd}(a,n)=1 dit que l'inverse existe et que l'équation a une seule solution modulo nn ; sinon, l'inverse n'existe pas, et l'équation a plusieurs solutions ou aucune.

a)

pgcd(5,11)=1\mathrm{pgcd}(5,11)=1. Par essais : 5×9=45=44+1≡1(mod11)5\times 9=45=44+1\equiv 1\pmod{11}, donc l'inverse vaut 99. Piège : répondre 15\frac{1}{5} ou 0,20{,}2 ; un inverse modulaire est un ENTIER entre 00 et 1010.

b)

pgcd(4,15)=1\mathrm{pgcd}(4,15)=1, et 4×4=16=15+1≡1(mod15)4\times 4=16=15+1\equiv 1\pmod{15} : 44 est son propre inverse modulo 1515.

c)

Non : pgcd(9,24)=3≠1\mathrm{pgcd}(9,24)=3\neq 1. Tous les multiples de 99 sont des multiples de 33, et leurs restes modulo 2424 aussi, donc aucun ne vaut 11. Piège : croire que tout nombre non nul plus petit que le module est inversible ; ce n'est vrai que si le module est premier.

d)

Euclide : 60=2×23+1460=2\times 23+14 ; 23=1×14+923=1\times 14+9 ; 14=1×9+514=1\times 9+5 ; 9=1×5+49=1\times 5+4 ; 5=1×4+15=1\times 4+1. Remontée : 1=5−4=5−(9−5)=2×5−9=2(14−9)−9=2×14−3×9=2×14−3(23−14)=5×14−3×23=5(60−2×23)−3×23=5×60−13×231=5-4=5-(9-5)=2\times 5-9=2(14-9)-9=2\times 14-3\times 9=2\times 14-3(23-14)=5\times 14-3\times 23=5(60-2\times 23)-3\times 23=5\times 60-13\times 23. Donc −13×23≡1(mod60)-13\times 23\equiv 1\pmod{60}, et l'inverse vaut −13+60=47-13+60=47. Vérification : 23×47=1 081=18×60+123\times 47=1\,081=18\times 60+1. Piège : s'arrêter sur −13-13, qui n'est pas écrit comme un reste.

e)

Euclide : 75=2×32+1175=2\times 32+11 ; 32=2×11+1032=2\times 11+10 ; 11=1×10+111=1\times 10+1. Remontée : 1=11−10=11−(32−2×11)=3×11−32=3(75−2×32)−32=3×75−7×321=11-10=11-(32-2\times 11)=3\times 11-32=3(75-2\times 32)-32=3\times 75-7\times 32. Donc u=3u=3 et v=−7v=-7, et uu est bien entre 00 et 3232. Vérification : 225−224=1225-224=1. Piège : développer tous les produits à chaque étape, ce qui fait perdre la trace de 7575 et de 3232 ; on substitue une division à la fois, de bas en haut.

f)

1717 est premier, donc l'inverse de 55 existe : 5×7=35=34+15\times 7=35=34+1, c'est 77. On multiplie les deux membres par 77 : x≡7×3=21≡4(mod17)x\equiv 7\times 3=21\equiv 4\pmod{17}. Vérification : 5×4=20=17+35\times 4=20=17+3.

g)

pgcd(7,18)=1\mathrm{pgcd}(7,18)=1, et 7×13=91=5×18+17\times 13=91=5\times 18+1, donc l'inverse de 77 modulo 1818 vaut 1313. Alors x≡13×5=65=3×18+11≡11(mod18)x\equiv 13\times 5=65=3\times 18+11\equiv 11\pmod{18}. Vérification : 7×11=77=4×18+57\times 11=77=4\times 18+5. Piège : chercher à diviser 55 par 77 ; modulo 1818, on ne divise jamais, on multiplie par l'inverse.

h)

d=pgcd(8,28)=4d=\mathrm{pgcd}(8,28)=4, et 44 divise 1212 : il y a 44 solutions modulo 2828. On divise tout par 44, module compris : 2x≡3(mod7)2x\equiv 3\pmod 7. L'inverse de 22 modulo 77 est 44, donc x≡12≡5(mod7)x\equiv 12\equiv 5\pmod 7. Modulo 2828, les solutions sont 55, 1212, 1919 et 2626, et la plus petite vaut 55. Vérification : 8×5=40=28+128\times 5=40=28+12. Piège : diviser 88 et 1212 par 44 en gardant le module 2828, ce qui donne 2x≡3(mod28)2x\equiv 3\pmod{28}, sans solution puisque 2x−32x-3 est impair.

Contrôle : un inverse uu de aa se vérifie en calculant au mod nau\bmod n, qui doit valoir 11 ; une solution se vérifie en la remplaçant dans l'équation ; des coefficients de Bézout, en recalculant au+bvau+bv. Chaque vérification coûte une multiplication et une division.

Partie A : les bases (/50)

Exercice 1 : La division euclidienne et le reste

Toute l'arithmétique modulaire tient dans une opération que l'on croit connaître depuis l'école primaire. Le fil de la série : on ne s'intéresse plus au QUOTIENT mais au RESTE, et un reste est toujours positif, même quand le dividende ne l'est pas.

01234567891011
  • a) Énoncez le théorème de la division euclidienne de aa par nn, en précisant l'encadrement du reste.
  • b) Calculez le quotient et le reste de la division de 2026 par 12, puis de 2026 par 7.
  • c) Calculez −17 mod 5-17 \bmod 5 et −1 mod 12-1 \bmod 12. Attention au signe du reste.
  • d) En Python, l'opérateur %\% renvoie toujours un reste du signe du DIVISEUR ; en C et en Java, il renvoie un reste du signe du DIVIDENDE. Que valent −17 % 5-17\ \%\ 5 dans chaque langage ?
  • e) Si aujourd'hui est un mardi, quel jour sera-t-il dans 100 jours ? Et il y a 100 jours ?

Tape tes réponses, la page te dit juste ou faux 0/13

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) a=nq+ra = nq+r avec 0≤r<n0 \le r < n, le couple (q,r)(q,r) étant unique
  • b) 2026=12(168)+102026 = 12(168)+10 et 2026=7(289)+32026 = 7(289)+3
  • c) −17 mod 5=3-17 \bmod 5 = 3 et −1 mod 12=11-1 \bmod 12 = 11
  • d) 33 en Python, −2-2 en C et en Java
  • e) Jeudi dans 100 jours, dimanche il y a 100 jours
a)

Pour tout entier aa et tout entier n>0n>0, il existe un UNIQUE couple d'entiers (q,r)(q,r) tel que a=nq+ra=nq+r avec 0≤r<n0\leq r<n. Deux choses comptent dans cet énoncé : l'existence et l'unicité d'une part, et surtout l'ENCADREMENT du reste entre 0 inclus et nn exclu. C'est cet encadrement qui interdit un reste négatif, et c'est lui qu'on oublie quand a<0a<0.

b)

2026=12×168+102026=12\times 168+10, donc q=168q=168 et r=10r=10 : c'est ce que montre l'horloge de la figure, où l'on tourne 168 fois avant de s'arrêter sur 10. Pour 7 : 2026=7×289+32026=7\times 289+3, donc q=289q=289 et r=3r=3. On vérifie toujours en recalculant nq+rnq+r, ce qui coûte une seconde et attrape toutes les erreurs de table.

c)

Pour −17-17 par 5 : le quotient doit être choisi de sorte que le reste tombe dans [0;5[[0;5[. Avec q=−4q=-4 : −17=5×(−4)+3-17=5\times(-4)+3, donc r=3r=3. Le réflexe −17=5×(−3)−2-17=5\times(-3)-2 donnerait r=−2r=-2, qui n'est pas un reste valide. Pour −1-1 par 12 : −1=12×(−1)+11-1=12\times(-1)+11, donc r=11r=11 : c'est le dernier cran de l'horloge avant de repasser par zéro, ce qui est exactement l'image à retenir.

d)

En PYTHON, −17 % 5-17\ \%\ 5 vaut 3, la convention mathématique, puisque le diviseur 5 est positif. En C et en JAVA, l'opérateur renvoie −2-2, du signe du dividende. Les deux langages calculent correctement, ils ne répondent simplement pas à la même question. Conséquence pratique pour un programmeur : un code d'indexation circulaire écrit en C doit corriger le cas négatif, par exemple avec ((a % n)+n) % n((a\ \%\ n)+n)\ \%\ n, alors que le même code en Python fonctionne tel quel.

e)

Les jours de la semaine se comptent modulo 7. 100=7×14+2100=7\times 14+2, donc dans 100 jours on avance de 2 crans : mardi plus 2 donne JEUDI. Il y a 100 jours, on recule de 2 crans : mardi moins 2 donne DIMANCHE. On peut aussi écrire −100 mod 7=5-100\bmod 7=5 et avancer de 5, ce qui donne également dimanche, puisque avancer de 5 ou reculer de 2 revient au même sur un cycle de 7.

012345678910112026 = 12 × 168 + 10, donc 2026 mod 12 = 10

Exercice 2 : Les congruences et leurs règles de calcul

Écrire a≡b(modn)a\equiv b\pmod n n'est pas une notation décorative : c'est une relation d'ÉQUIVALENCE compatible avec l'addition et la multiplication, ce qui permet de calculer sur les restes comme sur les nombres.

  • a) Donnez la définition de a≡b(modn)a\equiv b\pmod n en termes de divisibilité, puis en termes de restes.
  • b) Démontrez que la congruence modulo nn est réflexive, symétrique et transitive.
  • c) Démontrez que si a≡ba\equiv b et c≡dc\equiv d modulo nn, alors a+c≡b+da+c\equiv b+d et ac≡bdac\equiv bd.
  • d) Calculez le reste de 17417^{4} modulo 5 sans jamais élever 17 à la puissance 4.
  • e) La compatibilité vaut-elle pour la DIVISION ? Testez sur 6≡12(mod6)6\equiv 12\pmod 6 divisé par 2.

Tape tes réponses, la page te dit juste ou faux 0/13

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) nn divise a−ba-b, ce qui revient à dire que aa et bb ont le même reste modulo nn
  • b) Réflexive, symétrique et transitive : c'est une relation d'équivalence, à nn classes
  • c) (a+c)−(b+d)=(k+ℓ)n(a+c)-(b+d) = (k+\ell)n et ac−bd=(ck+bℓ)nac-bd = (ck+b\ell)n, en ajoutant et retranchant bcbc
  • d) 17≡217 \equiv 2, donc 174≡24=16≡1(mod5)17^{4} \equiv 2^{4} = 16 \equiv 1 \pmod 5
  • e) NON : 6≡12(mod6)6 \equiv 12 \pmod 6, mais 3≢6(mod6)3 \not\equiv 6 \pmod 6. On simplifie par kk seulement si kk est premier avec nn
a)

DIVISIBILITÉ : a≡b(modn)a\equiv b\pmod n signifie que nn divise a−ba-b. RESTES : cela signifie que aa et bb ont le MÊME reste dans la division par nn. Les deux formulations sont équivalentes, et il faut savoir passer de l'une à l'autre : la première sert dans les démonstrations, la seconde dans les calculs.

b)

RÉFLEXIVE : nn divise a−a=0a-a=0, donc a≡aa\equiv a. SYMÉTRIQUE : si nn divise a−ba-b, il divise aussi b−a=−(a−b)b-a=-(a-b), donc b≡ab\equiv a. TRANSITIVE : si nn divise a−ba-b et b−cb-c, il divise leur somme (a−b)+(b−c)=a−c(a-b)+(b-c)=a-c, donc a≡ca\equiv c. Les trois propriétés font de la congruence une relation d'équivalence, dont les classes sont exactement les nn ensembles de nombres ayant le même reste.

c)

Par hypothèse a−b=kna-b=kn et c−d=ℓnc-d=\ell n pour deux entiers kk et ℓ\ell. SOMME : (a+c)−(b+d)=(a−b)+(c−d)=(k+ℓ)n(a+c)-(b+d)=(a-b)+(c-d)=(k+\ell)n, multiple de nn ✓. PRODUIT : ac−bd=ac−bc+bc−bd=c(a−b)+b(c−d)=(ck+bℓ)nac-bd=ac-bc+bc-bd=c(a-b)+b(c-d)=(ck+b\ell)n, multiple de nn ✓. L'astuce du produit consiste à ajouter et retrancher bcbc, ce qui fait apparaître les deux hypothèses ; elle vaut la peine d'être retenue, elle resservira ailleurs.

d)

17≡2(mod5)17\equiv 2\pmod 5, car 17=5×3+217=5\times 3+2. La compatibilité avec le produit permet d'élever les deux membres à la puissance 4 : 174≡24=16≡1(mod5)17^{4}\equiv 2^{4}=16\equiv 1\pmod 5. Le reste vaut donc 1, alors que 174=83 52117^{4}=83\,521, un nombre qu'on n'a jamais eu à écrire. C'est tout l'intérêt du calcul modulaire : on réduit AVANT de multiplier, jamais après.

e)

NON, la division n'est pas compatible en général. On a bien 6≡12(mod6)6\equiv 12\pmod 6, puisque 12−6=612-6=6. En divisant les deux membres par 2 : 3≡6(mod6)3\equiv 6\pmod 6 serait faux, car 6−3=36-3=3 n'est pas un multiple de 6. La règle correcte est qu'on peut simplifier par kk à condition de diviser AUSSI le modulo par pgcd(k,n)\mathrm{pgcd}(k,n), ou bien si kk est premier avec nn. C'est cette restriction qui rend l'exercice 5 sur les inverses nécessaire.

Exercice 3 : Calculer dans les entiers modulo n

L'ensemble des restes modulo nn est un monde clos où l'on additionne et multiplie sans jamais sortir. Sa table de multiplication révèle une différence profonde selon que nn est premier ou non.

×112233445566123456246135362514415263531642654321
  • a) Dressez la table d'addition modulo 5. Chaque ligne contient-elle chaque élément exactement une fois ?
  • b) La figure donne la table de multiplication modulo 7, privée du zéro. Vérifiez trois cases au hasard et dites ce que l'on observe sur chaque ligne.
  • c) Dressez la table de multiplication modulo 6, privée du zéro. Que constate-t-on de différent ?
  • d) Trouvez deux éléments non nuls dont le produit est nul modulo 6. Comment appelle-t-on de tels éléments, et pourquoi n'en existe-t-il pas modulo 7 ?
  • e) Énoncez la règle générale qui distingue les deux cas.

Tape tes réponses, la page te dit juste ou faux 0/15

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) Oui : ajouter un nombre fixé est une permutation, pour tout nn
  • b) 3×5≡13\times5 \equiv 1, 4×6≡34\times6 \equiv 3, 2×4≡12\times4 \equiv 1 : chaque ligne contient 1, donc tout élément non nul est inversible
  • c) La ligne de 2 vaut 2,4,0,2,42,4,0,2,4 et celle de 3 vaut 3,0,3,0,33,0,3,0,3 : des zéros, et pas de 1
  • d) 2×3=6≡0(mod6)2 \times 3 = 6 \equiv 0 \pmod 6 : des DIVISEURS DE ZÉRO, impossibles modulo 7 qui est premier
  • e) aa est inversible modulo nn si et seulement si pgcd(a,n)=1\mathrm{pgcd}(a,n)=1 ; tous le sont si et seulement si nn est premier
a)

La table d'addition modulo 5 s'obtient en additionnant puis en prenant le reste. Sa première ligne, celle de 0, est 0,1,2,3,40,1,2,3,4 ; celle de 1 est 1,2,3,4,01,2,3,4,0 ; celle de 2 est 2,3,4,0,12,3,4,0,1, et ainsi de suite. OUI, chaque ligne contient chaque élément exactement une fois : ajouter un nombre fixé est une permutation, car on peut toujours revenir en arrière en ajoutant l'opposé. C'est vrai pour tout nn, premier ou non.

b)

Vérifications : 3×5=15=14+1≡13\times 5=15=14+1\equiv 1 ; 4×6=24=21+3≡34\times 6=24=21+3\equiv 3 ; 2×4=8≡12\times 4=8\equiv 1. On observe que CHAQUE LIGNE contient chaque élément non nul exactement une fois, et en particulier qu'elle contient 1. Autrement dit, tout élément non nul possède un INVERSE modulo 7, ce qui n'a rien d'évident et sera le sujet de l'exercice 5.

c)

Modulo 6, la ligne de 2 donne 2,4,0,2,42,4,0,2,4 pour les multiplicateurs 1,2,3,4,51,2,3,4,5 : elle contient un ZÉRO alors qu'aucun des deux facteurs n'est nul, et elle ne contient PAS 1. La ligne de 3 donne 3,0,3,0,33,0,3,0,3, encore pire. Seules les lignes de 1 et de 5 contiennent 1. La table est donc très différente de celle modulo 7.

d)

2×3=6≡0(mod6)2\times 3=6\equiv 0\pmod 6, avec 2≠02\neq 0 et 3≠03\neq 0. On appelle de tels éléments des DIVISEURS DE ZÉRO. Ils apparaissent parce que 6 se factorise en 2×32\times 3 : le produit récupère tous les facteurs de 6 et devient un multiple de 6. Modulo 7 c'est impossible, car 7 est PREMIER : si 7 divise un produit abab, il divise aa ou bb, propriété qui définit précisément les nombres premiers.

e)

Un élément aa est inversible modulo nn si et seulement si pgcd(a,n)=1\mathrm{pgcd}(a,n)=1. Par conséquent, TOUS les éléments non nuls sont inversibles si et seulement si nn est PREMIER, auquel cas les entiers modulo nn forment un corps. Si nn est composé, les éléments qui partagent un facteur avec nn ne sont pas inversibles et sont des diviseurs de zéro. Cette distinction est ce qui rend les modules premiers si précieux en cryptographie et en codes correcteurs.

×112233445566123456246135362514415263531642654321tout élément non nul est inversible

Exercice 4 : Le PGCD et l'algorithme d'Euclide

L'algorithme le plus ancien encore en usage date de 300 avant notre ère et il est toujours celui que les processeurs exécutent. Sa justification tient en une ligne de congruence.

462462
def pgcd(a, n):
    while n != 0:
        a, n = n, a % n
    return a

def pgcd_rec(a, n):
    if n == 0:
        return a
    return pgcd_rec(n, a % n)
  • a) Démontrez que pgcd(a,n)=pgcd(n,a mod n)\mathrm{pgcd}(a,n)=\mathrm{pgcd}(n,a\bmod n), ce qui justifie l'algorithme.
  • b) Déroulez l'algorithme d'Euclide sur 1071 et 462, comme sur la figure, et donnez le PGCD.
  • c) Déroulez-le sur 240 et 46.
  • d) Écrivez l'algorithme en Python, en version itérative puis en version récursive.
  • e) Combien d'étapes l'algorithme demande-t-il au maximum ? Quel couple de nombres constitue le pire cas ?

Tape tes réponses, la page te dit juste ou faux 0/15

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) dd divise aa et nn si et seulement si il divise nn et rr : mêmes diviseurs communs, même PGCD
  • b) 147147, puis 2121, puis 00 : pgcd(1071,462)=21\mathrm{pgcd}(1071,462) = 21
  • c) 10,6,4,2,010, 6, 4, 2, 0 : pgcd(240,46)=2\mathrm{pgcd}(240,46) = 2, en cinq étapes contre trois
  • d) Itérative : (a,n)→(n,a mod n)(a,n) \to (n, a \bmod n). Récursive : même égalité, cas de base n=0n=0
  • e) Au plus environ 5 fois le nombre de chiffres du plus petit ; pire cas, deux Fibonacci consécutifs
a)

Posons r=a mod nr=a\bmod n, donc a=nq+ra=nq+r. Si dd divise aa et nn, alors il divise a−nq=ra-nq=r, donc il divise nn et rr. Réciproquement, si dd divise nn et rr, il divise nq+r=anq+r=a, donc il divise aa et nn. Les deux couples ont donc EXACTEMENT les mêmes diviseurs communs, et en particulier le même plus grand. L'algorithme consiste alors à remplacer le couple par un couple plus petit jusqu'à ce que le reste s'annule.

b)

1071=2×462+1471071=2\times 462+147 ; 462=3×147+21462=3\times 147+21 ; 147=7×21+0147=7\times 21+0. Le dernier reste non nul est 21, donc pgcd(1071,462)=21\mathrm{pgcd}(1071,462)=21. La figure donne la lecture géométrique : on pave le rectangle par des carrés de plus en plus petits, et le côté du dernier carré est le PGCD. Trois divisions ont suffi là où la recherche des diviseurs de 1071 en aurait demandé beaucoup plus.

c)

240=5×46+10240=5\times 46+10 ; 46=4×10+646=4\times 10+6 ; 10=1×6+410=1\times 6+4 ; 6=1×4+26=1\times 4+2 ; 4=2×2+04=2\times 2+0. Le PGCD vaut 2. Notez que ces deux nombres, plus petits que ceux de la question b, ont demandé PLUS d'étapes : le nombre d'étapes ne dépend pas de la taille des nombres mais de la suite des quotients, tous égaux à 1 dans le pire cas.

d)

Les deux versions tiennent en quatre lignes et se lisent directement sur la question a. La version ITÉRATIVE remplace le couple (a,n)(a,n) par (n,a mod n)(n,a\bmod n) à chaque tour et s'arrête quand le second terme s'annule ; c'est alors le premier qui porte le PGCD. La version RÉCURSIVE traduit la même égalité mot pour mot, avec le cas de base n=0n=0 qui renvoie aa. La récursive est plus lisible et son nombre d'appels est le nombre de divisions, donc elle ne risque aucun débordement de pile pour des entiers de taille raisonnable ; l'itérative évite malgré tout ce risque et reste la forme employée dans les bibliothèques.

e)

Le théorème de Lamé affirme que le nombre d'étapes est au plus environ 55 fois le nombre de CHIFFRES du plus petit des deux nombres, ce qui est remarquablement peu : moins de 50 étapes pour des nombres de dix chiffres. Le PIRE CAS est celui de deux nombres de FIBONACCI consécutifs, comme 89 et 55, pour lesquels tous les quotients valent 1 et où l'algorithme ne peut donc rien accélérer. C'est un exemple rare où le pire cas d'un algorithme est connu explicitement.

462462puis 147, puis 211071 = 2 × 462 + 147, 462 = 3 × 147 + 21, 147 = 7 × 21le dernier reste non nul est le PGCD : 21

Exercice 5 : L'inverse modulaire et les équations de congruence

On ne divise pas modulo nn : on multiplie par un inverse, quand il existe. Savoir décider s'il existe, puis le calculer, est la compétence centrale du chapitre.

  • a) Donnez la condition d'existence de l'inverse de aa modulo nn, et trouvez l'inverse de 3 modulo 7 par recherche exhaustive.
  • b) Trouvez l'inverse de 4 modulo 9, puis montrez que 4 n'a pas d'inverse modulo 8.
  • c) Résolvez 3x≡2(mod7)3x\equiv 2\pmod 7.
  • d) Résolvez 4x≡6(mod10)4x\equiv 6\pmod{10}. Combien de solutions y a-t-il modulo 10 ?
  • e) Résolvez 6x≡4(mod9)6x\equiv 4\pmod{9}, ou montrez qu'il n'y a pas de solution.

Tape tes réponses, la page te dit juste ou faux 0/15

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) L'inverse existe si et seulement si pgcd(a,n)=1\mathrm{pgcd}(a,n)=1 ; celui de 3 modulo 7 vaut 5
  • b) 4−1=74^{-1} = 7 modulo 9 ; modulo 8, pgcd(4,8)=4\mathrm{pgcd}(4,8)=4, donc aucun inverse
  • c) x≡3(mod7)x \equiv 3 \pmod 7, solution unique
  • d) x=4x = 4 et x=9x = 9 : deux solutions modulo 10, autant que le PGCD
  • e) Aucune solution : pgcd(6,9)=3\mathrm{pgcd}(6,9)=3 ne divise pas 4
a)

L'inverse de aa modulo nn existe si et seulement si pgcd(a,n)=1\mathrm{pgcd}(a,n)=1, c'est-à-dire si aa et nn sont PREMIERS ENTRE EUX. Pour 3 modulo 7 : pgcd(3,7)=1\mathrm{pgcd}(3,7)=1, l'inverse existe. On essaie : 3×1=33\times 1=3, 3×2=63\times 2=6, 3×3=9≡23\times 3=9\equiv 2, 3×4=12≡53\times 4=12\equiv 5, 3×5=15≡13\times 5=15\equiv 1 ✓. L'inverse de 3 modulo 7 est donc 5.

b)

pgcd(4,9)=1\mathrm{pgcd}(4,9)=1, l'inverse existe : 4×7=28=27+1≡1(mod9)4\times 7=28=27+1\equiv 1\pmod 9, donc l'inverse est 7. Modulo 8, en revanche, pgcd(4,8)=4≠1\mathrm{pgcd}(4,8)=4\neq 1 : il n'y a pas d'inverse. On le vérifie sur la table, les multiples de 4 modulo 8 ne prennent que les valeurs 0 et 4, jamais 1. Le même nombre 4 est donc inversible ou non selon le module, ce qui montre bien que l'inversibilité est une propriété du COUPLE et non du nombre.

c)

On multiplie les deux membres par l'inverse de 3, c'est-à-dire par 5 : 5×3x≡5×25\times 3x\equiv 5\times 2, soit 15x≡1015x\equiv 10, soit x≡3(mod7)x\equiv 3\pmod 7 puisque 15≡115\equiv 1 et 10≡310\equiv 3. Vérification : 3×3=9≡2(mod7)3\times 3=9\equiv 2\pmod 7 ✓. Il y a donc exactement UNE solution modulo 7, comme toujours lorsque le coefficient est inversible.

d)

pgcd(4,10)=2\mathrm{pgcd}(4,10)=2, qui ne vaut pas 1 : on ne peut pas inverser. Mais 2 DIVISE le second membre 6, donc l'équation a des solutions. On divise tout par 2, MODULE COMPRIS : 2x≡3(mod5)2x\equiv 3\pmod 5. Cette fois pgcd(2,5)=1\mathrm{pgcd}(2,5)=1 et l'inverse de 2 modulo 5 est 3, d'où x≡3×3=9≡4(mod5)x\equiv 3\times 3=9\equiv 4\pmod 5. Modulo 10, cela donne DEUX solutions, x=4x=4 et x=9x=9. Vérification : 4×4=16≡64\times 4=16\equiv 6 ✓ et 4×9=36≡64\times 9=36\equiv 6 ✓. Le nombre de solutions est égal au PGCD, ici 2.

e)

pgcd(6,9)=3\mathrm{pgcd}(6,9)=3, et 3 NE DIVISE PAS 4. L'équation n'a donc AUCUNE solution. On le voit directement : 6x6x est toujours un multiple de 3, donc son reste modulo 9 appartient à {0,3,6}\{0,3,6\}, et 4 n'y figure pas. Règle générale : ax≡b(modn)ax\equiv b\pmod n a des solutions si et seulement si pgcd(a,n)\mathrm{pgcd}(a,n) divise bb, et il y en a alors exactement pgcd(a,n)\mathrm{pgcd}(a,n) modulo nn.

Partie B : problèmes et raisonnement (/50)

Exercice 6 : Bézout et l'algorithme d'Euclide étendu

L'algorithme d'Euclide donne le PGCD ; en gardant la trace des calculs, il donne bien plus : deux coefficients qui expriment ce PGCD comme combinaison des deux nombres de départ. C'est ce qui rend le calcul d'un inverse rapide.

def euclide_etendu(a, b):
    r, u, v = a, 1, 0
    rp, up, vp = b, 0, 1
    while rp != 0:
        q = r // rp
        r, u, v, rp, up, vp = rp, up, vp, r - q*rp, u - q*up, v - q*vp
    return r, u, v

def inverse(a, n):
    d, u, _ = euclide_etendu(a, n)
    if d != 1:
        return None
    return u % n
  • a) Énoncez le théorème de Bézout et dites ce qu'il devient lorsque les deux nombres sont premiers entre eux.
  • b) Trouvez deux entiers uu et vv tels que 1071u+462v=211071u+462v=21, en remontant les divisions de l'exercice 4.
  • c) Calculez l'inverse de 17 modulo 43 par l'algorithme d'Euclide étendu.
  • d) Comparez le coût de cette méthode avec celui de la recherche exhaustive de l'exercice 5.
  • e) Écrivez l'algorithme d'Euclide étendu en Python.

Tape tes réponses, la page te dit juste ou faux 0/13

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) au+bv=pgcd(a,b)au+bv = \mathrm{pgcd}(a,b), qui devient au+bv=1au+bv=1 pour deux nombres premiers entre eux
  • b) u=−3u = -3 et v=7v = 7 : −3(1071)+7(462)=21-3(1071)+7(462) = 21
  • c) 1=2(43)−5(17)1 = 2(43)-5(17), donc l'inverse de 17 modulo 43 vaut −5≡38-5 \equiv 38
  • d) Exhaustive : de l'ordre de nn, exponentiel. Euclide étendu : linéaire en le nombre de chiffres
  • e) L'algorithme renvoie le triplet PGCD, uu, vv, en propageant les coefficients à chaque tour
a)

Pour tous entiers aa et bb non tous nuls, il existe des entiers uu et vv tels que au+bv=pgcd(a,b)au+bv=\mathrm{pgcd}(a,b). Lorsque aa et bb sont PREMIERS ENTRE EUX, cela devient au+bv=1au+bv=1, et réciproquement : une telle écriture prouve que le PGCD vaut 1, puisque tout diviseur commun divise le membre de gauche donc divise 1. C'est le critère le plus commode pour démontrer que deux nombres sont premiers entre eux.

b)

On remonte les divisions. De 462=3×147+21462=3\times 147+21 on tire 21=462−3×14721=462-3\times 147. De 1071=2×462+1471071=2\times 462+147 on tire 147=1071−2×462147=1071-2\times 462. En substituant : 21=462−3(1071−2×462)=462−3×1071+6×462=7×462−3×107121=462-3\left(1071-2\times 462\right)=462-3\times 1071+6\times 462=7\times 462-3\times 1071. Donc u=−3u=-3 et v=7v=7. Vérification : −3×1071+7×462=−3213+3234=21-3\times 1071+7\times 462=-3213+3234=21 ✓. La discipline est de substituer UNE division à la fois, de bas en haut, sans jamais développer les produits avant la fin.

c)

Euclide d'abord : 43=2×17+943=2\times 17+9 ; 17=1×9+817=1\times 9+8 ; 9=1×8+19=1\times 8+1 ; 8=8×1+08=8\times 1+0. Le PGCD vaut 1, l'inverse existe. Remontée : 1=9−81=9-8 ; puis 8=17−98=17-9 donne 1=9−(17−9)=2×9−171=9-(17-9)=2\times 9-17 ; puis 9=43−2×179=43-2\times 17 donne 1=2(43−2×17)−17=2×43−5×171=2\left(43-2\times 17\right)-17=2\times 43-5\times 17. Donc −5×17≡1(mod43)-5\times 17\equiv 1\pmod{43}, et l'inverse de 17 est −5-5, c'est-à-dire 3838 modulo 43. Vérification : 17×38=646=43×15+117\times 38=646=43\times 15+1 ✓.

d)

La recherche exhaustive teste les valeurs 1,2,…,n−11,2,\dots,n-1 jusqu'à tomber sur 1 : son coût est de l'ordre de nn multiplications, donc EXPONENTIEL en le nombre de chiffres de nn. L'algorithme d'Euclide étendu, lui, effectue au plus environ 55 fois le nombre de chiffres de divisions, donc un coût LINÉAIRE en ce nombre. Sur un module de 600 chiffres comme ceux du chiffrement RSA, la première méthode est impossible dans l'âge de l'Univers et la seconde prend une fraction de milliseconde. C'est cet écart qui rend la cryptographie moderne praticable.

e)

Le code ci-dessous renvoie le triplet formé du PGCD et des deux coefficients de Bézout, en propageant les coefficients à chaque tour de boucle.

Exercice 7 : Le petit théorème de Fermat et l'exponentiation rapide

Calculer 31003^{100} puis prendre le reste est impossible à la main et coûteux pour une machine. Deux idées ramènent le calcul à quelques lignes : un théorème qui raccourcit l'exposant, un algorithme qui le décompose en binaire.

132645puissances de 3 modulo 7 : cycle de 6
def puissance_mod(a, e, n):
    resultat = 1
    a = a % n
    while e > 0:
        if e % 2 == 1:
            resultat = (resultat * a) % n
        a = (a * a) % n
        e = e // 2
    return resultat
  • a) Énoncez le petit théorème de Fermat et vérifiez-le sur a=3a=3 et p=7p=7 en dressant le cycle des puissances, comme sur la figure.
  • b) Calculez le reste de 31003^{100} modulo 7.
  • c) Calculez le reste de 210002^{1000} modulo 11.
  • d) Calculez 7117^{11} modulo 13 par exponentiation rapide, en décomposant l'exposant en binaire, puis vérifiez le résultat par le théorème de Fermat.
  • e) Combien de multiplications l'exponentiation rapide demande-t-elle pour un exposant de 600 chiffres, contre la méthode naïve ?

Tape tes réponses, la page te dit juste ou faux 0/14

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) ap−1≡1(modp)a^{p-1} \equiv 1 \pmod p ; le cycle de 3 modulo 7 est 3,2,6,4,5,13,2,6,4,5,1, de longueur 6
  • b) 100≡4(mod6)100 \equiv 4 \pmod 6, donc 3100≡34=81≡4(mod7)3^{100} \equiv 3^{4} = 81 \equiv 4 \pmod 7
  • c) 210≡12^{10} \equiv 1, donc 21000≡1(mod11)2^{1000} \equiv 1 \pmod{11}
  • d) 711≡2(mod13)7^{11} \equiv 2 \pmod{13}, confirmé par Fermat : 711≡7−1=27^{11} \equiv 7^{-1} = 2
  • e) Environ 3986 multiplications contre 1060010^{600}
a)

Si pp est PREMIER et si pp ne divise pas aa, alors ap−1≡1(modp)a^{p-1}\equiv 1\pmod p. Vérification avec a=3a=3 et p=7p=7 : 31=33^{1}=3, 32=9≡23^{2}=9\equiv 2, 33≡63^{3}\equiv 6, 34≡18≡43^{4}\equiv 18\equiv 4, 35≡12≡53^{5}\equiv 12\equiv 5, 36≡15≡13^{6}\equiv 15\equiv 1 ✓. La figure montre ce cycle de longueur 6 : les six valeurs non nulles apparaissent toutes, exactement une fois, avant que le cycle ne se referme sur 1.

b)

Le théorème permet de réduire l'EXPOSANT modulo p−1=6p-1=6. Comme 100=6×16+4100=6\times 16+4, on a 3100=(36)16×34≡116×34=81≡4(mod7)3^{100}=\left(3^{6}\right)^{16}\times 3^{4}\equiv 1^{16}\times 3^{4}=81\equiv 4\pmod 7. Le reste vaut 4. Retenez la règle et sa limite : on réduit la BASE modulo pp, et l'EXPOSANT modulo p−1p-1, jamais l'inverse.

c)

p=11p=11 est premier et ne divise pas 2, donc 210≡1(mod11)2^{10}\equiv 1\pmod{11}. Comme 1000=10×1001000=10\times 100, on a 21000=(210)100≡1100=1(mod11)2^{1000}=\left(2^{10}\right)^{100}\equiv 1^{100}=1\pmod{11}. Le reste vaut 1. Un nombre de plus de trois cents chiffres a été réduit en une ligne.

d)

1111 s'écrit 10111011 en binaire, donc 711=78×72×717^{11}=7^{8}\times 7^{2}\times 7^{1}. On calcule les carrés successifs modulo 13 : 71≡77^{1}\equiv 7 ; 72=49≡107^{2}=49\equiv 10 ; 74≡102=100≡97^{4}\equiv 10^{2}=100\equiv 9 ; 78≡92=81≡37^{8}\equiv 9^{2}=81\equiv 3. Produit : 3×10×7=210≡210−208=2(mod13)3\times 10\times 7=210\equiv 210-208=2\pmod{13}. VÉRIFICATION par Fermat : 712≡17^{12}\equiv 1, donc 711≡7−17^{11}\equiv 7^{-1}, l'inverse de 7 modulo 13. Or 7×2=14≡17\times 2=14\equiv 1, donc cet inverse vaut 2 ✓. Deux chemins indépendants, même réponse.

e)

La méthode naïve demande N−1N-1 multiplications pour aNa^{N}, soit environ 1060010^{600} opérations pour un exposant de 600 chiffres : c'est inconcevable, l'Univers n'a connu qu'environ 101710^{17} secondes. L'exponentiation rapide en demande au plus 2log⁡2N2\log_{2}N, soit environ 2×600×3,3219≈39862\times 600\times 3{,}3219\approx 3986 multiplications, l'affaire de quelques millisecondes. C'est cette différence, et elle seule, qui permet à un navigateur d'ouvrir une connexion chiffrée en un clin d'œil.

Exercice 8 : Cinq affirmations à corriger

Chacune des cinq affirmations suivantes est FAUSSE. Dites pourquoi et donnez l'énoncé correct.

  • 1) « −17 mod 5-17 \bmod 5 vaut −2-2, puisque −17=5×(−3)−2-17=5\times(-3)-2. »
  • 2) « Si ac≡bc(modn)ac\equiv bc\pmod n alors a≡b(modn)a\equiv b\pmod n, comme dans les entiers. »
  • 3) « Tout élément non nul possède un inverse modulo nn. »
  • 4) « Pour calculer 31003^{100} modulo 7, on réduit l'exposant modulo 7. »
  • 5) « L'algorithme d'Euclide devient lent quand les nombres sont grands, il faut donc éviter de l'utiliser en cryptographie. »

Tape tes réponses, la page te dit juste ou faux 0/11

1)
2)
3)
4)
5)
Voir la correction

Réponses

  • 1) FAUX : −2-2 n'est pas un reste valide. −17=5(−4)+3-17 = 5(-4)+3, donc le reste vaut 3
  • 2) FAUX : on ne simplifie que par un cc inversible. 2×3≡4×3(mod6)2\times3 \equiv 4\times3 \pmod 6 et pourtant 2≢42 \not\equiv 4
  • 3) FAUX : seuls 1 et 5 sont inversibles modulo 6. Il faut pgcd(a,n)=1\mathrm{pgcd}(a,n)=1
  • 4) FAUX : l'exposant se réduit modulo p−1=6p-1=6, non modulo 7. On trouve 4, et non 2
  • 5) FAUX : moins de 3000 divisions pour deux nombres de 600 chiffres. Euclide étendu est un pilier de RSA
1)

FAUX. L'égalité écrite est correcte, mais −2-2 n'est PAS un reste valide : la division euclidienne impose 0≤r<n0\leq r<n, donc ici 0≤r<50\leq r<5. Il faut choisir q=−4q=-4 : −17=5×(−4)+3-17=5\times(-4)+3, donc −17 mod 5=3-17\bmod 5=3. C'est aussi ce que renvoie Python. La confusion vient des langages comme C ou Java, dont l'opérateur suit une autre convention et renvoie effectivement −2-2 : le langage n'a pas tort, il ne calcule simplement pas le reste euclidien.

2)

FAUX. On ne peut simplifier par cc que si cc est INVERSIBLE modulo nn, c'est-à-dire premier avec nn. Contre-exemple : 2×3≡4×3(mod6)2\times 3\equiv 4\times 3\pmod 6, car 6≡12≡06\equiv 12\equiv 0, et pourtant 2≢4(mod6)2\not\equiv 4\pmod 6. La règle correcte est que ac≡bc(modn)ac\equiv bc\pmod n entraîne a≡b(modnpgcd(c,n))a\equiv b\pmod{\frac{n}{\mathrm{pgcd}(c,n)}}, ce qui ne redonne le module de départ que si le PGCD vaut 1.

3)

FAUX. L'inverse de aa modulo nn existe si et seulement si pgcd(a,n)=1\mathrm{pgcd}(a,n)=1. Modulo 6, les éléments 2, 3 et 4 n'ont pas d'inverse, puisqu'ils partagent un facteur avec 6 ; seuls 1 et 5 en ont. L'affirmation n'est vraie que lorsque nn est PREMIER, cas où tous les éléments non nuls sont premiers avec nn par définition.

4)

FAUX, et l'erreur est d'un seul cran mais elle change tout. Le petit théorème de Fermat donne 36≡1(mod7)3^{6}\equiv 1\pmod 7, donc c'est modulo p−1=6p-1=6 que l'on réduit l'exposant, et non modulo 7. On a 100≡4(mod6)100\equiv 4\pmod 6, donc 3100≡34=81≡43^{100}\equiv 3^{4}=81\equiv 4. Réduire modulo 7 donnerait 100≡2100\equiv 2, donc 32=9≡23^{2}=9\equiv 2, résultat faux. Règle : la base se réduit modulo nn, l'exposant modulo p−1p-1.

5)

FAUX, c'est exactement le contraire. Le théorème de Lamé garantit que le nombre de divisions est au plus environ 5 fois le nombre de CHIFFRES du plus petit nombre : pour deux nombres de 600 chiffres, cela fait moins de 3000 divisions, soit une fraction de milliseconde. C'est cette efficacité qui permet de calculer l'exposant de déchiffrement d'une clé RSA, et l'algorithme d'Euclide étendu est donc au contraire un pilier de la cryptographie moderne.

Exercice 9 : Problème : les clés de contrôle, de l'ISBN au numéro de carte

Chaque code que vous tapez, numéro de livre, de carte bancaire ou de sécurité sociale, porte un chiffre supplémentaire dont le seul rôle est de détecter vos fautes de frappe. Ce chiffre est un reste.

9×17×38×12×31×12×33×14×35×16×38×10×3?clésomme pondérée 97, il faut atteindre un multiple de 10
  • a) Un code ISBN à treize chiffres vérifie que la somme pondérée par 1,3,1,3,…1,3,1,3,\dots des treize chiffres est un multiple de 10. La figure donne les douze premiers chiffres et une somme pondérée de 97. Calculez la clé.
  • b) Vérifiez que le code complet satisfait bien la condition.
  • c) Un utilisateur se trompe d'un chiffre en tapant le code. Démontrez que l'erreur est toujours détectée.
  • d) Il intervertit deux chiffres voisins. Montrez que l'erreur est détectée SAUF dans un cas précis, et donnez un exemple.
  • e) Le code ISBN à dix chiffres utilisait les poids 10,9,…,110,9,\dots,1 et le module 11, avec un XX pour la valeur 10. Pourquoi 11 détecte-t-il mieux que 10 ?

Tape tes réponses, la page te dit juste ou faux 0/11

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) La clé vaut 3, puisque 97+3=10097+3 = 100
  • b) 100≡0(mod10)100 \equiv 0 \pmod{10} : le code est valide
  • c) La somme varie de w(d′−d)w(d'-d), qui ne peut être multiple de 10 : 3 est premier avec 10
  • d) La somme varie de 2(a−b)2(a-b) : l'erreur échappe quand ∣a−b∣=5\lvert a-b \rvert = 5
  • e) 11 est PREMIER : aucun diviseur de zéro, donc toutes les interversions sont détectées, au prix du caractère X
a)

Dans la convention ISBN-13, la clé est le treizième chiffre et elle porte le poids 1, puisque les poids alternent en commençant par 1. Il faut donc que 97+c97+c soit un multiple de 10, avec 0≤c≤90\leq c\leq 9. Le multiple de 10 immédiatement supérieur à 97 est 100, donc c=3c=3. Formule générale : c=(10−(S mod 10)) mod 10c=\left(10-\left(S\bmod 10\right)\right)\bmod 10, et le dernier modulo sert au seul cas où SS est déjà multiple de 10, où la clé vaut 0 et non 10.

b)

Somme totale : 97+3=10097+3=100, qui est bien un multiple de 10 puisque 100≡0(mod10)100\equiv 0\pmod{10} ✓. Le code complet est donc valide, et c'est cette vérification, et non le calcul de la clé, que la caisse d'une librairie effectue à chaque scan.

c)

Supposons qu'un chiffre de poids ww passe de dd à d′d'. La somme change de w(d′−d)w\left(d'-d\right), avec ww valant 1 ou 3 et d′−dd'-d compris entre −9-9 et 9, non nul. Pour que l'erreur passe inaperçue, il faudrait que w(d′−d)≡0(mod10)w\left(d'-d\right)\equiv 0\pmod{10}. Avec w=1w=1 : il faudrait 1010 divise d′−dd'-d, impossible pour un écart non nul de moins de 10. Avec w=3w=3 : comme pgcd(3,10)=1\mathrm{pgcd}(3,10)=1, on peut simplifier par 3 et l'on retombe sur la même impossibilité. Toute erreur d'UN chiffre est donc détectée, et c'est précisément parce que 3 est premier avec 10.

d)

En intervertissant deux chiffres voisins aa et bb portant les poids 1 et 3, la somme passe de a+3ba+3b à b+3ab+3a, soit une variation de 2(a−b)2\left(a-b\right). L'erreur échappe au contrôle si 2(a−b)≡0(mod10)2\left(a-b\right)\equiv 0\pmod{10}, c'est-à-dire si a−b≡0(mod5)a-b\equiv 0\pmod 5, donc si ∣a−b∣=5\left|a-b\right|=5. EXEMPLE : le code 97827234568079782723456807 est valide, de somme 103 plus une clé 7, soit 110. En intervertissant le 2 et le 7 des positions 4 et 5, on obtient 9782 ⁣→ ⁣9787…9782\!\to\!9787\dots, dont la somme pondérée devient 113 plus 7, soit 120, encore multiple de 10 : la faute de frappe n'est PAS détectée. C'est la faiblesse connue de l'ISBN-13, et c'est un défaut sérieux puisque l'interversion de deux chiffres voisins est l'erreur de saisie la plus courante.

e)

Parce que 11 est PREMIER alors que 10 ne l'est pas. Modulo un nombre premier, tout coefficient non nul est inversible et il n'existe aucun diviseur de zéro : intervertir deux chiffres aa et bb de poids wiw_{i} et wjw_{j} fait varier la somme de (wi−wj)(a−b)(w_{i}-w_{j})(a-b) ; comme wi−wjw_{i}-w_{j} est non nul et compris entre −9-9 et 9, 11 ne le divise pas, et cette variation ne peut s'annuler modulo 11 que si 11 divise a−ba-b, c'est-à-dire si a=ba=b : il n'y a pas eu d'erreur. L'ISBN-10 détectait donc TOUTES les interversions de deux chiffres, y compris non voisins. Le prix à payer est qu'une clé peut valoir 10, d'où le caractère XX, ce qui a été jugé gênant pour les codes-barres et explique l'abandon du système au profit du moins bon mais plus commode ISBN-13.

9×17×38×12×31×12×33×14×35×16×38×10×3?clésomme pondérée 97, il faut atteindre un multiple de 10clé = 3, car 97 + 3 = 100

Exercice 10 : Problème : le chiffrement RSA en petits nombres

Tout ce qui précède se rassemble ici. Le chiffrement RSA repose sur l'inverse modulaire, le petit théorème de Fermat et l'exponentiation rapide, et il tient sur une page tant qu'on prend des nombres premiers minuscules.

  • a) On choisit p=11p=11 et q=13q=13. Calculez le module n=pqn=pq et l'indicatrice φ(n)=(p−1)(q−1)\varphi(n)=(p-1)(q-1).
  • b) On choisit l'exposant public e=7e=7. Vérifiez qu'il convient, puis calculez l'exposant privé dd, inverse de ee modulo φ(n)\varphi(n).
  • c) Chiffrez le message M=9M=9 par C=Me mod nC=M^{e}\bmod n.
  • d) Déchiffrez CC par M=Cd mod nM=C^{d}\bmod n et vérifiez que l'on retrouve 9.
  • e) Pourquoi un attaquant qui connaît nn et ee ne peut-il pas retrouver dd en pratique, alors que la méthode est évidente en principe ?

Tape tes réponses, la page te dit juste ou faux 0/13

a)
b)
c)
d)
e)
Voir la correction

Réponses

  • a) n=143n = 143 et φ(n)=120\varphi(n) = 120
  • b) pgcd(7,120)=1\mathrm{pgcd}(7,120)=1 et d=103d = 103, puisque 7×103=721=6(120)+17 \times 103 = 721 = 6(120)+1
  • c) C=48C = 48
  • d) M=48103 mod 143=9M = 48^{103} \bmod 143 = 9, par le théorème d'Euler
  • e) Il faudrait factoriser nn ; sur 600 chiffres, aucun algorithme connu n'y parvient, et cette difficulté est constatée, non démontrée
a)

n=11×13=143n=11\times 13=143. φ(n)=(11−1)(13−1)=10×12=120\varphi(n)=(11-1)(13-1)=10\times 12=120. Le module nn est PUBLIC, il fait partie de la clé publique ; φ(n)\varphi(n) est SECRET, car le connaître revient à connaître la clé privée, comme la question e le montrera.

b)

Il faut pgcd(e,φ(n))=1\mathrm{pgcd}(e,\varphi(n))=1 : ici pgcd(7,120)=1\mathrm{pgcd}(7,120)=1, car 7 est premier et ne divise pas 120. L'exposant convient. On cherche dd tel que 7d≡1(mod120)7d\equiv 1\pmod{120}. Par Euclide étendu ou par essai guidé : 7×103=721=720+1=6×120+17\times 103=721=720+1=6\times 120+1, donc d=103d=103. Vérification : 721 mod 120=1721\bmod 120=1 ✓.

c)

C=97 mod 143C=9^{7}\bmod 143. On procède par exponentiation rapide en réduisant à chaque étape : 92=819^{2}=81 ; 94=812=65619^{4}=81^{2}=6561, et 6561=143×45+1266561=143\times 45+126 donc 94≡1269^{4}\equiv 126 ; enfin 97=94×92×9≡126×81×99^{7}=9^{4}\times 9^{2}\times 9\equiv 126\times 81\times 9. On calcule 126×81=10 206≡53126\times 81=10\,206\equiv 53 car 10 206=143×71+5310\,206=143\times 71+53, puis 53×9=477≡4853\times 9=477\equiv 48 car 477=143×3+48477=143\times 3+48. Donc C=48C=48. Le message chiffré est 48.

d)

M=48103 mod 143M=48^{103}\bmod 143. Le nombre 4810348^{103} compte 174 chiffres et l'on ne l'écrit évidemment jamais : l'exponentiation rapide réduit modulo 143 après chaque carré, et l'on obtient M=9M=9 ✓, le message d'origine. Le théorème qui garantit ce retour est celui d'Euler, généralisation du petit théorème de Fermat : comme ed≡1(modφ(n))ed\equiv 1\pmod{\varphi(n)}, on a Med≡M(modn)M^{ed}\equiv M\pmod n.

e)

En principe la méthode est immédiate : il suffit de factoriser nn pour retrouver pp et qq, d'en déduire φ(n)\varphi(n), puis dd par Euclide étendu. Ici, avec n=143n=143, un élève trouve 11×1311\times 13 en quelques secondes. Mais dans un usage réel nn compte environ 600 chiffres, et aucun algorithme connu ne sait factoriser un tel nombre en un temps raisonnable : les meilleurs demanderaient des milliards d'années. Toute la sécurité repose donc sur une ASYMÉTRIE de coût, multiplier deux grands nombres premiers est instantané, retrouver les facteurs ne l'est pas. Remarquez que rien de tout cela n'est démontré : on ne sait pas prouver que la factorisation est difficile, on constate seulement que personne n'a trouvé comment la rendre facile.

Il manque quelque chose dans cette série ? Un type d'exercice que ton prof donne, un énoncé qui te bloque, 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.

De quoi s'agit-il ?
Je lis chaque demande moi-même, personne d'autre ne la voit. Inutile d'écrire ton nom ou celui de ton école.
Quand ta demande est traitée, tu es prévenu par courriel et dans ton espace.

En envoyant, tu acceptes que je lise ta demande pour y répondre. Elle est gardée avec ton compte, effacée avec lui, et jamais publiée : politique de confidentialité.

Chapitre précédent Systèmes de numération informatique Chapitre suivant Théorie des ensembles et relations

© Ahmed Squalli Houssaini. Série publiée sur www.letuteurscientifique.ca/exercices/n11-arithmetique-modulaire. Libre pour l'usage personnel et en classe ; sa republication ailleurs demande une autorisation écrite (mentions légales).

Voir aussi

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.

Site par Studio Squalli