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.
- a) Énoncez le théorème de la division euclidienne de par , 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 et . 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 dans chaque langage ?
- e) Si aujourd'hui est un mardi, quel jour sera-t-il dans 100 jours ? Et il y a 100 jours ?
Voir la correction
Réponses
- a) avec , le couple étant unique
- b) et
- c) et
- d) en Python, en C et en Java
- e) Jeudi dans 100 jours, dimanche il y a 100 jours
a) Pour tout entier et tout entier , il existe un UNIQUE couple d'entiers tel que avec . Deux choses comptent dans cet énoncé : l'existence et l'unicité d'une part, et surtout l'ENCADREMENT du reste entre 0 inclus et exclu. C'est cet encadrement qui interdit un reste négatif, et c'est lui qu'on oublie quand .
b) , donc et : 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 : , donc et . On vérifie toujours en recalculant , ce qui coûte une seconde et attrape toutes les erreurs de table.
c) Pour par 5 : le quotient doit être choisi de sorte que le reste tombe dans . Avec : , donc . Le réflexe donnerait , qui n'est pas un reste valide. Pour par 12 : , donc : c'est le dernier cran de l'horloge avant de repasser par zéro, ce qui est exactement l'image à retenir.
d) En PYTHON, vaut 3, la convention mathématique, puisque le diviseur 5 est positif. En C et en JAVA, l'opérateur renvoie , 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 , alors que le même code en Python fonctionne tel quel.
e) Les jours de la semaine se comptent modulo 7. , 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 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.