Javascript 1(mod N)是什么意思?
我试图用JavaScript实现一个简单的算法。无论我看哪里,它都要求代码计算出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
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)。