Le modulo semble être l’opération la plus simple en programmation — le reste d’une division — jusqu’à ce qu’un nombre négatif fasse apparaître des désaccords entre langages. Cette calculatrice affiche tous les résultats à la fois pour que la convention soit toujours claire et ajoute l’exponentiation modulaire, utile en cryptographie et pour le hachage.

Le quotient détermine le reste

La division des entiers produit un quotient et un reste liés par une seule identité : a = q·n + r. Mais cette équation possède plusieurs solutions entières lorsque des nombres négatifs interviennent. Il suffit de préciser comment le quotient est arrondi pour déterminer le reste.

Si le quotient est arrondi vers zéro (division tronquée), le reste prend le signe du dividende a. S’il est arrondi vers moins l’infini (division par défaut), le reste prend le signe du diviseur n. Si l’on exige un reste non négatif, on obtient la convention euclidienne utilisée en mathématiques. Aucune de ces réponses n’est « fausse » : elles sont toutes trois cohérentes pour une question qui devient ambiguë avec des valeurs négatives.

Pourquoi JavaScript et Python ne donnent-ils pas le même résultat ?

-7 % 3 vaut -1 en JavaScript, C, C++, Java, Go et Rust, mais 2 en Python et Ruby. Les langages de la famille C ont adopté la division tronquée il y a plusieurs décennies ; leur opérateur % conserve donc le signe du dividende. Les concepteurs de Python ont choisi la division arrondie vers le bas, car elle rend l’opérateur % pratique pour son usage courant : ramener un indice dans une plage fixe, où l’on souhaite presque toujours un résultat non négatif.

C’est une source fréquente de bogues lors du portage de code ou des échanges entre langages. Une expression telle que arr[i % len] fonctionne en Python même si i est négatif, mais en JavaScript elle peut produire un indice négatif. Pour obtenir un résultat euclidien portable, utilisez explicitement ((i % len) + len) % len.

À quoi sert le modulo : horloges, hachage et cryptographie

Calculs cycliques. Les horloges (mod 12 ou 24), les jours de la semaine (mod 7) et les angles (mod 360) utilisent tous le modulo euclidien. Toute grandeur cyclique peut se ramener à un calcul modulo.

Hachage et répartition de charge. Les tables de hachage placent une clé dans le compartiment hash(key) mod numBuckets. Comme les hachages sont souvent signés, c’est précisément là que le bogue des restes négatifs apparaît ; le modulo euclidien fournit un indice de compartiment valide.

Cryptographie. RSA et Diffie-Hellman reposent sur l’exponentiation modulaire : élever un nombre à une grande puissance modulo un grand nombre. Le calcul direct est impossible, car les résultats intermédiaires auraient un nombre astronomique de chiffres. L’algorithme rapide d’élévation au carré et de multiplication réduit donc modulo m après chaque étape. L’onglet Exponentiation modulaire de cette calculatrice exécute exactement cet algorithme avec BigInt.