Javascript 1(mod N)是什么意思?

Javascript 1(mod N)是什么意思?,javascript,modulo,Javascript,Modulo,我试图用JavaScript实现一个简单的算法。无论我看哪里,它都要求代码计算出1(mod N)。据我所知,1模任何东西(或1%N)都是1 我错过了什么?它总是1吗?如果是,为什么不直接使用1呢?算法可能会这样说: x ≡ 1 (mod N) # x is congruent to 1 (modulo N) (mod N)和三等号表示您使用的是模运算,而不是普通运算。把它想象成时钟的指针。在模运算中,x≡ 1表示x和1属于同一个类别。如果您的时钟具有Nhour divisions,转动指针1

我试图用JavaScript实现一个简单的算法。无论我看哪里,它都要求代码计算出
1(mod N)
。据我所知,1模任何东西(或
1%N
)都是1


我错过了什么?它总是1吗?如果是,为什么不直接使用1呢?

算法可能会这样说:

x ≡ 1 (mod N)  # x is congruent to 1 (modulo N)
(mod N)
和三等号表示您使用的是模运算,而不是普通运算。把它想象成时钟的指针。在模运算中,
x≡ 1
表示
x
1
属于同一个类别。如果您的时钟具有
N
hour divisions,转动指针
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-1
0
一致意味着它可以被
N
本身整除,因此可以安全地使用模运算符:

if ((x - 1) % N === 0) {
    ...
}
中定义了模(%)运算符的工作方式。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 % -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
}

“1模任何东西(或1%N)都是1”-除非N是1,在这种情况下,结果是零。要理解的关键是,在数学表示法中,
(mod N)
适用于表达式的两侧,即使它通常只写在右侧(请参阅)。因此,在@Blender的回答中,表达式
a≡ 1(模块N)
应理解为“
a≡ 1
当系统取模N时,或
a%N==1%N
(或只是
a%N==1
,因为
1%N
始终等于1)。为了澄清:
x≡ 1(mod N)
实际上是
x%N==1%N
,它简化为
x%N==1
,因为
1%N==1
(假设
N
不是1)。