模数为负数

时间:2013-10-09 05:43:31

标签: math modulo negative-number

考虑以下表达式:

(a - b) mod N

以下哪项等同于上述表达式?

1) ((a mod N) + (-b mod N)) mod N

2) ((a mod N) - (b mod N)) mod N

另外,如何计算(-b mod N),即如何计算负数的mod?

感谢。

3 个答案:

答案 0 :(得分:5)

我不想用一些复杂的数学概念来打扰你,所以我会尽量保持简单。 当我们说a = b(mod c)时,我们只是说a-b是c的倍数。 这意味着当我们想知道mod c的值是什么时,说它是a或a-c或a + c或a + 1000 * c是真的。 因此,您的2个公式是有效的。

但你想要的是知道计算机会给你的答案,对吧? 嗯,这取决于您使用的语言。 以Java为例,mod b的符号为a,其绝对值严格低于b。这意味着a = 7,b = 3且N = 5,(a-b)%N = 4,但你的两个表达式将返回-1。

如果你想用模数做算术,我建议你做的是创建你自己的mod函数,所以它总是给你一个正整数。这样,您的2个表达式将始终等于原始表达式。

伪代码示例:

function mod (int a, int N)
  return (a%N+N)%N

答案 1 :(得分:1)

答案 2 :(得分:0)

while(N < 0)
{
    N= N+MOD;
}

或者,
这也有效,

int mod(num ,modValue)
{
    return ( modValue- ( (-num) % modValue) );
}