El módulo parece la operación más simple en programación — solo el resto tras la división — hasta que aparece un número negativo y tu lenguaje discrepa con el de al lado. Esta calculadora muestra todas las respuestas a la vez, para que siempre sepas qué convención estás viendo, y añade exponenciación modular para los casos de criptografía y hashing donde el módulo realmente se gana su lugar.

El resto no es único — el cociente lo decide

La división de enteros produce un cociente y un resto vinculados por una identidad: a = q·n + r. El problema es que esta única ecuación tiene más de una solución entera una vez que entran en juego los signos. Fija cómo redondeas el cociente y el resto se sigue automáticamente.

Redondea el cociente hacia cero (división truncada) y el resto termina con el signo del dividendo a. Redondéalo hacia menos infinito (división de piso) y el resto toma el signo del divisor n. Insiste en que el resto sea no negativo y obtienes la convención euclidiana usada en toda la matemática. Ninguna de estas es 'incorrecta' — son tres respuestas internamente consistentes a una pregunta genuinamente ambigua.

Por qué JavaScript y Python discrepan

-7 % 3 es -1 en JavaScript, C, C++, Java, Go y Rust, pero 2 en Python y Ruby. Los lenguajes de la familia C estandarizaron la división truncada hace décadas, así que su % conserva el signo del dividendo. Los diseñadores de Python eligieron la división de piso porque hace que % se comporte bien para el uso real más común — envolver un índice dentro de un rango fijo — donde casi siempre quieres un resultado no negativo.

Esta es una fuente frecuente de errores al migrar código o llamar entre lenguajes. Un patrón como arr[i % len] es seguro en Python incluso cuando i es negativo, pero en JavaScript puede indexar con un número negativo. La solución portable es forzar explícitamente el resultado euclidiano: ((i % len) + len) % len.

Dónde realmente importa el módulo: relojes, hashing y criptografía

Aritmética de envolvimiento. Los relojes (mod 12 o 24), los días de la semana (mod 7) y los ángulos (mod 360) son todos módulo euclidiano. Cualquier cosa que se repite en ciclos es un módulo disfrazado.

Hashing y balanceo de carga. Las tablas hash colocan una clave en el bucket hash(clave) mod numBuckets. Como los hashes suelen tener signo, es exactamente aquí donde muerde el bug del resto negativo — y por qué la convención euclidiana es la que quieres para un índice de bucket válido.

Criptografía. RSA y Diffie-Hellman se basan en la exponenciación modular: elevar un número a una potencia grande módulo un número grande. Calcular la potencia directamente es imposible (los valores intermedios tendrían una cantidad astronómica de dígitos), así que el método rápido de elevar al cuadrado y multiplicar reduce módulo m tras cada paso. La pestaña de Exponenciación Modular de esta calculadora ejecuta exactamente ese algoritmo sobre BigInt.