考虑以下表达式:
(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?
感谢。
答案 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)
回答是选项
查看解释
http://naveensnayak.wordpress.com/2009/12/21/modulus-of-negative-numbers/
http://answers.yahoo.com/question/index?qid=20080922034737AAsFEfY
答案 2 :(得分:0)
while(N < 0)
{
N= N+MOD;
}
或者,
这也有效,
int mod(num ,modValue)
{
return ( modValue- ( (-num) % modValue) );
}