【发布时间】:2013-03-25 07:31:24
【问题描述】:
最近我解决了一个我必须计算 (a-b)%n 的问题。当 a-b 是正数时,结果是不言自明的,但对于负数,我得到的结果似乎令人困惑..我只是想知道如何我们为负数计算这个结果。
欢迎任何处理模运算符属性的链接。
【问题讨论】:
标签: math language-agnostic modulo modulus
最近我解决了一个我必须计算 (a-b)%n 的问题。当 a-b 是正数时,结果是不言自明的,但对于负数,我得到的结果似乎令人困惑..我只是想知道如何我们为负数计算这个结果。
欢迎任何处理模运算符属性的链接。
【问题讨论】:
标签: math language-agnostic modulo modulus
http://en.m.wikipedia.org/wiki/Modulo_operation
在许多编程语言(C、Java)中,模运算符被定义为模数与第一个操作数具有相同的符号。这意味着以下等式成立:
(-a) % n = -(a % n)
例如,-8%3 将是 -2,因为 8%3 是 2。
其他的,例如 Python,在除以 n 时计算 a % n 作为正余数,这意味着
(-a) % n = n - (a % n)
例如,-8%3 是 1,因为 3-(8%3) 是 3-2 是 1。
请注意,在modular arithmetic 中,添加或减去 n 的任何倍数都不会改变结果,因为“相等”(或 同余,如果您更喜欢该术语)是根据可分性定义的:X 是如果它是 n 的倍数,则等于 0,如果 A-B 是 n 的倍数,则 A 等于 B。例如 -2 等于 1 模 3,因为 -2-1 = -3 可以被 3 整除。
【讨论】: