数学中的模数和负数?

Modulo and Negative Number in Math?

今晚我很好奇数学中的模负数。

不管是什么编程语言,计算器returns different values都是靠自己背后的公式,如果初中考试有这些题,正确答案是什么:

  -7 mod  2 = ?
   7 mod -2 = ?
  -7 mod -2 = ? 

ps:对不起,我年纪大了记不起那些“基础题”的答案了,谢谢你的好意给我一个正确的答案!

ps2:献给献出这个问题的人:相信我,这个问题真的很有帮助,至少它可以帮助你理解为什么这段代码失败了:

function isEvenOrOdd(num) {
    return num % 2 === 1 ?'odd' : 'even';
}

isEvenOrOdd(5); // 'odd'
isEvenOrOdd(18); // 'even'
isEvenOrOdd(0); // 'even'
isEvenOrOdd(-7); // 'even'

要计算 x mod m,其中 x 为负,您需要继续将 m 添加到 x 直到它变为非负,所以 -7 % 2 = -7 + 2 + 2 + 2 + 2 = 1 .

要检查一个数字是奇数还是偶数,总是用绝对值来做,比如|x| mod m 所以你不需要担心 modulo 的负值。

数学中,模数必须>1,约定是模运算产生a+km=b的最小非负整数解:

-7 mod  2 = 1
 7 mod -2     Illegal
-7 mod -2     Illegal

扩展定义以包含负数(以及 1 和 -1)很容易:

-7 mod  2 = 1
 7 mod -2 = 1
-7 mod -2 = 1
-7 mod  3 = 2

但是在计算中,不同的语言使用不同的约定:

-7 mod  2 = {1, or -1, or undefined}

我怀疑你的系统说 -7 mod 2 = -1,所以 isEvenOrOdd(-7); 产生 'even'(因为 -1 ≠ 1)。