有人可以向我解释为什么 mod (-4) 3 =2 而不是 1 吗?

Could someone explain to me why mod (-4) 3 =2 and not 1?

我正在努力思考 mod 函数。一切似乎都很好,直到我在 GHCi 中尝试 mod (-4) 3。有人可以向我解释为什么 mod (-4) 3 等于 2 而不是 1 吗?真的很困扰我!

与正数的mod相同。在算术 modulo c 中,我们试图将任何 x 表示为 qc+r,其中 r 必须是一个非负整数。

我们为什么不通过示例对其进行测试?

取 −100 mod 8=4。这是因为 8⋅−13=−104。余数为4.

我会尝试解释...我的方式: qc + r 表示正数意味着 100 mod 8 = 4 因为你可以将它表示为 8*12 + 4 意味着你可以从中提取 12 个 8 但你将不再需要 4 来达到100. 在负数的情况下,你可以 "pull out" -13 个 8,然后你需要加 4(正数)才能达到 100。

因此,在您的情况下,您可以取出两个 3(以 -6 结尾),然后您需要剩余的正 2 才能达到 -4

可能需要数学家来解释: https://math.stackexchange.com/questions/519845/modulo-of-a-negative-number

integer x  ... -6 -5 -4 -3 -2 -1  0  1  2  3  4  5 ...
mod x 3    ...  0  1  2  0  1  2  0  1  2  0  1  2 ...

上面的序列满足任意x的等式mod (x+3) 3 = mod x 3。注意 0 1 2 是如何连续重复的。

请注意,在 Haskell 中我们都有

mod (-4) 3 == 2
rem (-4) 3 == -1

哪里

integer x  ... -6 -5 -4 -3 -2 -1  0  1  2  3  4  5 ...
rem x 3    ...  0 -2 -1  0 -2 -1  0  1  2  0  1  2 ...

mod x ydiv x y 的 "remainder",其中除法向下舍入(向-无穷大)。相反,rem x yquot x y 的余数,其中除法向零舍入(因此 "remainder" 可以是负数)。