1(mod N)是什么意思?

时间:2013-04-04 00:58:23

标签: javascript modulo

我正在尝试在JavaScript中实现一个简单的算法。无论我在哪里,它都要求代码解决1 (mod N)。据我所知,1个模数(或1%N)是1。

我错过了什么?它总是1,如果是这样,为什么不使用1?

2 个答案:

答案 0 :(得分:10)

算法可能会说:

x ≡ 1 (mod N)  # x is congruent to 1 (modulo N)

(mod N)和三等号表示您正在使用模运算,而不是常规算术。把它想象成一个时钟的手。在模块化算术中,x ≡ 1表示x1属于同一residue class。如果您的时钟时间为N小时,则转动手1时间或x次会将指针移至相同的结束位置。

对于您的具体情况,x ≡ 1 (mod N)可以在JavaScript 中表示为x % N === 1,如果x永远不会消极。否则,即使它应该等于你的平等也不会成立:例如,-1 ≡ 1 (mod 2)但是(-1) % 2 === -1,即使它们在模运算中“相等”,它也不等于1感。

如果您希望x为负数,则可以重新排列同余关系:

       x ≡ 1 (mod N)
⇒  x - 1 ≡ 0 (mod N)

x - 10一致意味着它可以被N本身整除,因此您可以安全地使用模运算符:

if ((x - 1) % N === 0) {
    ...
}

答案 1 :(得分:1)

模{(3)运算符如何工作在ECMA-262 §11.5.3中定义。有一些怪癖,ECMAScript模运算符接受浮点数和整数:

对于整数:

1 % -Infinity returns 1
...
1 % -2 returns 1
1 % -1 returns 0
1 %  0 returns NaN
1 %  1 returns 0
1 %  2 returns 1
...
1 % Infinity returns 1

对于花车,

1 % -1.1 returns 1
1 %  0.1 returns 0.09999999999999995
1 %  0.6 returns 0.4
1 %  0.5 returns 0
1 %  0.4 returns 0.19999999999999996
1 %  0.9 returns 0.09999999999999998
1 %  1.1 returns 1

因此,如果没有应用模运算符的上下文,则很难确定它的使用原因。最重要的是代码的文档,但我想这是不可用的。

一个用途是,在需要整数的情况下,将0和1评估为false,将其他所有内容评估为true,所以:

if (1 % n) {
  // do this if n is something other than 0 or 1
}