¿Qué es [math] -12 \ bmod 5 [/ math]?

La respuesta es -2 pero no por las razones dadas por la respuesta anterior. El problema principal que dicta la respuesta es el orden de operación.

Hablando estrictamente, el operador mod gana menos y se ejecuta primero. Obviamente, 12 mod 5 es 2. Luego ejecute el operador menos y el resultado final será -2.

Ahora, si uno quiere ver cómo funciona el operador mod en números negativos, entonces necesita especificar “(-12) mod 5”. La respuesta a esto normalmente debería ser un error. El operador mod solo se define para enteros positivos. Dicho esto, diferentes computadoras y calculadoras hacen cosas extrañas a veces cuando se forzan errores. Depende de cómo el programador especifique la resolución de error. Esto es análogo a preguntar qué mostrará una calculadora si le pide que calcule la raíz cuadrada de menos uno o 10 para potenciar 200. Entonces, tres opciones para responder a (-12) mod 5:

A. ERROR, cero intermitente, pantalla congelada, etc.

B. -2

C. -3

En resumen, para (-12) mod 5, puede definir la respuesta del sistema como desee. El operador negativo entero y mod es un terreno fértil. Pero -12 mod 5 siempre es -2 debido al orden de los operadores.

Este es un ejemplo de una pregunta que puede confundir a las personas debido a la notación conflictiva.

En matemáticas, las siguientes dos afirmaciones significan cosas muy diferentes:

[matemáticas] 19 \ bmod 5 = 4 [/ matemáticas]
[matemáticas] 19 \ equiv 4 \ mod 5 [/ matemáticas]


La primera instrucción, [matemáticas] 19 \ bmod 5 = 4 [/ matemáticas], significa que el resto que obtienes después de dividir [matemáticas] 19 [/ matemáticas] entre [matemáticas] 5 [/ matemáticas] es [matemáticas] 4 [/ matemáticas]. Esto es lo que estás preguntando. En general, si [matemática] a \ bmod n = b [/ matemática], entonces [matemática] b [/ matemática] es siempre un número entero entre [matemática] 0 [/ matemática] y [matemática] (n-1) [ / math] inclusive, incluso si [math] a [/ math] es negativo (aunque las implementaciones en varios lenguajes de programación difieren; ver más abajo). Podemos definir la función [math] \ bmod [/ math] de forma recursiva de la siguiente manera:

[matemática] a \ bmod n = a [/ matemática], si [matemática] 0 \ leq a \ leq n-1 [/ matemática]
[matemática] a \ bmod n = (an) \ bmod n [/ matemática], si [matemática] a \ geq n [/ matemática]
[matemática] a \ bmod n = (a + n) \ bmod n [/ matemática], si [matemática] a <0 [/ matemática]

Por lo tanto, para responder a su pregunta, [matemáticas] -12 \ bmod 5 = -7 \ bmod 5 = -2 \ bmod 5 = 3 \ bmod 5 = 3. [/ Matemáticas]

PERO…

Desafortunadamente, esta no es la única forma en que se define la función [math] \ bmod [/ math]. Prácticamente cada lenguaje de programación tiene sus propias reglas sobre lo que sucede cuando [math] a [/ math] o [math] n [/ math] es negativo. Algunos siempre dan la respuesta con el mismo signo que [math] a [/ math] (en cuyo caso, la respuesta a su pregunta sería [math] -2 [/ math]), algunos siempre dan la respuesta con el mismo signo como [matemática] n [/ matemática] (en cuyo caso, la respuesta sería [matemática] 3 [/ matemática]), y otros siempre dan una respuesta positiva entre [matemática] 0 [/ matemática] y [matemática] (n -1) [/ math], como la definición anterior (la definición anterior es compatible con lo que se llama división euclidiana). Entonces, para concluir, tanto usted como su hermano están en lo correcto, dependiendo de la implementación interna de su lenguaje de programación de [math] \ bmod [/ math].


La segunda declaración, [math] 19 \ equiv 4 \ mod 5 [/ math], significa que [math] 19 [/ math] y [math] 4 [/ math] están en la misma clase de equivalencia en el módulo de enteros [math] ] 5 [/ matemáticas]. Esencialmente, esto significa que [matemática] 19 [/ matemática] y [matemática] 4 [/ matemática] son ​​números de la forma [matemática] 5k + 4 [/ matemática], donde [matemática] k \ in \ mathbb {Z }[/matemáticas]. En esta notación, podría escribir las siguientes declaraciones y todas serían correctas:

[matemáticas] 19 \ equiv 4 \ mod 5 [/ matemáticas]
[matemáticas] 19 \ equiv 204 \ mod 5 [/ matemáticas]
[matemáticas] 19 \ equiv -1 \ mod 5 [/ matemáticas]
[matemáticas] 19 \ equiv -748386 \ mod 5 [/ matemáticas]

En matemáticas decimos que

[matemáticas] 0 \ leqslant [/ matemáticas] [matemáticas] x \ bmod n

Por ejemplo, cualquier número entero [math] \ bmod 5 [/ math] se encuentra en el rango de 0 a 4 (inclusive).

Piensa en un reloj con 5 horas. Comience en 0. Muévase 12 veces en sentido antihorario.

Obtienes esto:

Que son tres. Esta es la misma posición que [math] -2 \ bmod 5 [/ math] también, pero en matemáticas, generalmente queremos que el módulo sea un número positivo.


Sin embargo, en lenguajes de programación, el módulo puede ser negativo. En algunos idiomas, el mod es [matemática] -2 [/ matemática]. Hay muchas opciones diferentes. En matemáticas, usamos la división euclidiana.

“Divmod” por Salix alba en Wikipedia en inglés. Licenciado bajo CC BY-SA 3.0 a través de Commons – Archivo: Divmod.svg – Wikimedia Commons

Operación de módulo

Para los números negativos, debe tener cuidado porque “módulo” no siempre es lo mismo que “resto”, y los lenguajes de programación también varían en cómo manejan esto.

El lenguaje Haskell es muy sofisticado al respecto. Lo resuelven de la siguiente manera: “” es una división entera truncada hacia cero. Entonces -12 “ 5 = -2. El resto es entonces -12 `rem` 5 = -2: tiene que hacerlo, porque los resultados deben satisfacer (resultado) * 5 + (remresult) = -12.

Sin embargo, Haskell también ofrece “div”, que es una división entera truncada hacia el infinito negativo. En ese caso, -12 `div` 5 = -3; esto requiere un resto diferente para el cual Haskell ofrece mod: -12 `mod` 5 = 3. Nuevamente, (divresult) * 5 + (modresult) = 12.

Tenga en cuenta que ambos tipos de resto son en realidad el mismo módulo 5. Por lo tanto, ambos son consistentes con la aritmética del módulo 5. La diferencia está en cómo manejas la división de enteros con números negativos: ¿redondeas hacia abajo hacia -infinito o hacia arriba hacia cero?

Si toma el número [matemática] -12 [/ matemática] módulo [matemática] 5 [/ matemática] obtendrá [matemática] 3 [/ matemática] o [matemática] -2 [/ matemática]. Ambos son correctos ya que [matemática] -2 [/ matemática] y [matemática] 3 [/ matemática] son ​​módulos congruentes [matemática] 5 [/ matemática].

Por lo general, querrá que indique su resultado para que su módulo residual [matemática] n [/ matemática] se dé como un número entre [matemática] 0 [/ matemática] y [matemática] n-1 [/ matemática] , así que con ese entendimiento, [math] -12 [/ math] es congruente con [math] 3 [/ math] modulo [math] 5 [/ math]. Pero no es incorrecto decir que [matemática] -12 [/ matemática] es congruente con [matemática] -2 [/ matemática] módulo [matemática] 5 [/ matemática].

Porque si traza el número -12 en el número y marca (círculos) múltiplos de 5, marca -15, y -12 es tres más que -15.

Pero 3 = -2 si solo está considerando el resto al dividir por 5.

Es corto solo cambia los signos, para números que suman el divisor, 1 = -4, 2 = -3, 3 = -2, y así sucesivamente para 5.