自然数的取模运算的定义是这样的:
如果a和d是两个自然数,d非零,可以证明存在两个唯一的整数 q 和 r,满足 a = qd + r 且0 ≤ r < d。其中,q 被称为商,r 被称为
余数。
那么对于负数,是否可以沿用这样的定义呢?
假如我们按照正数求余的规则求 (-10) mod 3 的结果,就可以表示 -10 为 (-4)* 3 +2。
其中,2是余数,-4是商。
进一步,如果允许余数是负数,它的
绝对值小于
除数呢,那就
可以表示 -10 为 (-3)* 3 -1。-1 是余数,-3是商。
C++: cout << (-10) % 3; // 输出 -1
Java: System.out.println((-10) % 3); // 输出 -1
Python :>>> (-10) % 3 // 输出 2
百度计算器:(-10) mod 3 = 2
Google 计算器:(-10) mod 3 = 2
有道计算器:(-10) mod 3 = -1
所以,负数模运算 尚无统一定论。不好绝对地 说哪个对,哪个错。
个人看法,-10 % 3 = -1 计较合理。
因为 -10 / 3 = -3, 不该 等于 -4
于是 余 -1 也顺理成章,较合理,易理解。