4

考虑以下表达式:

(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是怎么计算的?

谢谢。

4

3 回答 3

5

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

但你想要的是知道电脑会给你的答案,对吧?好吧,这取决于您使用的语言。以 Java 为例,a mod b 具有 a 的符号,并且绝对值严格低于 b。这意味着在 a = 7、b = 3 和 N = 5 的情况下,(ab)%N = 4,但您的两个表达式将返回 -1。

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

伪代码示例:

function mod (int a, int N)
  return (a%N+N)%N
于 2013-10-09T07:57:41.713 回答
0
while(N < 0)
{
    N= N+MOD;
}

或者,
这也可以,

int mod(num ,modValue)
{
    return ( modValue- ( (-num) % modValue) );
}
于 2014-12-21T18:57:00.370 回答