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.

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.

Série autocorrigée Tape tes réponses sous chaque 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.

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 0r<n0\leq r<n. Le reste est TOUJOURS positif, y compris pour a<0a<0 : 17mod5=3-17\bmod 5=3. Attention, l'opérateur des langages C et Java ne suit pas cette convention.
  • CONGRUENCES : ab(modn)a\equiv b\pmod n signifie que nn divise aba-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 : acbc(modn)ac\equiv bc\pmod n n'entraîne ab(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,amodn)\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 axb(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 ap11(modp)a^{p-1}\equiv 1\pmod p. On réduit donc la BASE modulo pp et l'EXPOSANT modulo p1p-1. L'EXPONENTIATION RAPIDE calcule aemodna^{e}\bmod n en environ 2log2e2\log_{2}e multiplications.

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.

012345678910112026 = 12 x 168 + 10, donc 2026 mod 12 = 10
  • 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 17mod5-17 \bmod 5 et 1mod12-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 0r<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) 17mod5=3-17 \bmod 5 = 3 et 1mod12=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 0r<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 100mod7=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.

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

Écrire ab(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 ab(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 aba\equiv b et cdc\equiv d modulo nn, alors a+cb+da+c\equiv b+d et acbdac\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 612(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 aba-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 acbd=(ck+b)nac-bd = (ck+b\ell)n, en ajoutant et retranchant bcbc
  • d) 17217 \equiv 2, donc 17424=161(mod5)17^{4} \equiv 2^{4} = 16 \equiv 1 \pmod 5
  • e) NON : 612(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É : ab(modn)a\equiv b\pmod n signifie que nn divise aba-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 aa=0a-a=0, donc aaa\equiv a. SYMÉTRIQUE : si nn divise aba-b, il divise aussi ba=(ab)b-a=-(a-b), donc bab\equiv a. TRANSITIVE : si nn divise aba-b et bcb-c, il divise leur somme (ab)+(bc)=ac(a-b)+(b-c)=a-c, donc aca\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 ab=kna-b=kn et cd=nc-d=\ell n pour deux entiers kk et \ell. SOMME : (a+c)(b+d)=(ab)+(cd)=(k+)n(a+c)-(b+d)=(a-b)+(c-d)=(k+\ell)n, multiple de nn ✓. PRODUIT : acbd=acbc+bcbd=c(ab)+b(cd)=(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) 172(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 : 17424=161(mod5)17^{4}\equiv 2^{4}=16\equiv 1\pmod 5. Le reste vaut donc 1, alors que 174=8352117^{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 612(mod6)6\equiv 12\pmod 6, puisque 126=612-6=6. En divisant les deux membres par 2 : 36(mod6)3\equiv 6\pmod 6 serait faux, car 63=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.

x112233445566123456246135362514415263531642654321tout element non nul est inversible
  • 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×513\times5 \equiv 1, 4×634\times6 \equiv 3, 2×412\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=60(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+113\times 5=15=14+1\equiv 1 ; 4×6=24=21+334\times 6=24=21+3\equiv 3 ; 2×4=812\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=60(mod6)2\times 3=6\equiv 0\pmod 6, avec 202\neq 0 et 303\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.

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.

462462puis 147, puis 211071 = 2 x 462 + 147, 462 = 3 x 147 + 21, 147 = 7 x 21le dernier reste non nul est le PGCD : 21
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,amodn)\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,amodn)(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=amodnr=a\bmod n, donc a=nq+ra=nq+r. Si dd divise aa et nn, alors il divise anq=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,amodn)(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.

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 3x2(mod7)3x\equiv 2\pmod 7.
  • d) Résolvez 4x6(mod10)4x\equiv 6\pmod{10}. Combien de solutions y a-t-il modulo 10 ?
  • e) Résolvez 6x4(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) 41=74^{-1} = 7 modulo 9 ; modulo 8, pgcd(4,8)=4\mathrm{pgcd}(4,8)=4, donc aucun inverse
  • c) x3(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=923\times 3=9\equiv 2, 3×4=1253\times 4=12\equiv 5, 3×5=1513\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+11(mod9)4\times 7=28=27+1\equiv 1\pmod 9, donc l'inverse est 7. Modulo 8, en revanche, pgcd(4,8)=41\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×3x5×25\times 3x\equiv 5\times 2, soit 15x1015x\equiv 10, soit x3(mod7)x\equiv 3\pmod 7 puisque 15115\equiv 1 et 10310\equiv 3. Vérification : 3×3=92(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 : 2x3(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ù x3×3=94(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=1664\times 4=16\equiv 6 ✓ et 4×9=3664\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 : axb(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 538-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=4623×14721=462-3\times 147. De 1071=2×462+1471071=2\times 462+147 on tire 147=10712×462147=1071-2\times 462. En substituant : 21=4623(10712×462)=4623×1071+6×462=7×4623×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=981=9-8 ; puis 8=1798=17-9 donne 1=9(179)=2×9171=9-(17-9)=2\times 9-17 ; puis 9=432×179=43-2\times 17 donne 1=2(432×17)17=2×435×171=2\left(43-2\times 17\right)-17=2\times 43-5\times 17. Donc 5×171(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,,n11,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) ap11(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) 1004(mod6)100 \equiv 4 \pmod 6, donc 310034=814(mod7)3^{100} \equiv 3^{4} = 81 \equiv 4 \pmod 7
  • c) 21012^{10} \equiv 1, donc 210001(mod11)2^{1000} \equiv 1 \pmod{11}
  • d) 7112(mod13)7^{11} \equiv 2 \pmod{13}, confirmé par Fermat : 71171=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 ap11(modp)a^{p-1}\equiv 1\pmod p. Vérification avec a=3a=3 et p=7p=7 : 31=33^{1}=3, 32=923^{2}=9\equiv 2, 3363^{3}\equiv 6, 341843^{4}\equiv 18\equiv 4, 351253^{5}\equiv 12\equiv 5, 361513^{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 p1=6p-1=6. Comme 100=6×16+4100=6\times 16+4, on a 3100=(36)16×34116×34=814(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 p1p-1, jamais l'inverse.

c) p=11p=11 est premier et ne divise pas 2, donc 2101(mod11)2^{10}\equiv 1\pmod{11}. Comme 1000=10×1001000=10\times 100, on a 21000=(210)1001100=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 : 7177^{1}\equiv 7 ; 72=49107^{2}=49\equiv 10 ; 74102=10097^{4}\equiv 10^{2}=100\equiv 9 ; 7892=8137^{8}\equiv 9^{2}=81\equiv 3. Produit : 3×10×7=210210208=2(mod13)3\times 10\times 7=210\equiv 210-208=2\pmod{13}. VÉRIFICATION par Fermat : 71217^{12}\equiv 1, donc 711717^{11}\equiv 7^{-1}, l'inverse de 7 modulo 13. Or 7×2=1417\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 N1N-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 2log2N2\log_{2}N, soit environ 2×600×3,3239862\times 600\times 3{,}32\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) « 17mod5-17 \bmod 5 vaut 2-2, puisque 17=5×(3)2-17=5\times(-3)-2. »
  • 2) « Si acbc(modn)ac\equiv bc\pmod n alors ab(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×34×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 p1=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 0r<n0\leq r<n, donc ici 0r<50\leq r<5. Il faut choisir q=4q=-4 : 17=5×(4)+3-17=5\times(-4)+3, donc 17mod5=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×34×3(mod6)2\times 3\equiv 4\times 3\pmod 6, car 61206\equiv 12\equiv 0, et pourtant 2≢4(mod6)2\not\equiv 4\pmod 6. La règle correcte est que acbc(modn)ac\equiv bc\pmod n entraîne ab(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 361(mod7)3^{6}\equiv 1\pmod 7, donc c'est modulo p1=6p-1=6 que l'on réduit l'exposant, et non modulo 7. On a 1004(mod6)100\equiv 4\pmod 6, donc 310034=8143^{100}\equiv 3^{4}=81\equiv 4. Réduire modulo 7 donnerait 1002100\equiv 2, donc 32=923^{2}=9\equiv 2, résultat faux. Règle : la base se réduit modulo nn, l'exposant modulo p1p-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.

9x17x38x12x31x12x33x14x35x16x38x10x3?clesomme ponderee 97, il faut atteindre un multiple de 10cle = 3, car 97 + 3 = 100
  • 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) 1000(mod10)100 \equiv 0 \pmod{10} : le code est valide
  • c) La somme varie de w(dd)w(d'-d), qui ne peut être multiple de 10 : 3 est premier avec 10
  • d) La somme varie de 2(ab)2(a-b) : l'erreur échappe quand ab=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 0c90\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(Smod10))mod10c=\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 1000(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 à dd'. La somme change de w(dd)w\left(d'-d\right), avec ww valant 1 ou 3 et ddd'-d compris entre 9-9 et 9, non nul. Pour que l'erreur passe inaperçue, il faudrait que w(dd)0(mod10)w\left(d'-d\right)\equiv 0\pmod{10}. Avec w=1w=1 : il faudrait 1010 divise ddd'-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) Interverting 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(ab)2\left(a-b\right). L'erreur échappe au contrôle si 2(ab)0(mod10)2\left(a-b\right)\equiv 0\pmod{10}, c'est-à-dire si ab0(mod5)a-b\equiv 0\pmod 5, donc si ab=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 ⁣ ⁣97879782\!\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 : la variation 2(ab)2\left(a-b\right) de la question d ne peut alors s'annuler que si a=ba=b, c'est-à-dire s'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.

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)=(p1)(q1)\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=MemodnC=M^{e}\bmod n.
  • d) Déchiffrez CC par M=CdmodnM=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=48103mod143=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)=(111)(131)=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 7d1(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 : 721mod120=1721\bmod 120=1 ✓.

c) C=97mod143C=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 941269^{4}\equiv 126 ; enfin 97=94×92×9126×81×99^{7}=9^{4}\times 9^{2}\times 9\equiv 126\times 81\times 9. On calcule 126×81=1020653126\times 81=10\,206\equiv 53 car 10206=143×71+5310\,206=143\times 71+53, puis 53×9=4774853\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=48103mod143M=48^{103}\bmod 143. Le nombre 4810348^{103} compte 173 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 ed1(modφ(n))ed\equiv 1\pmod{\varphi(n)}, on a MedM(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.

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

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