Prime 函数中此条件的输出是什么?
What is the output of this condition in the Prime Function?
我从另一个 post 找到了这段代码,我正试图理解这个解决方案的一部分。
function sumPrimes(n) {
function isPrime(num) {
for ( var i = 2; i < num; i++ ) {
if ( num % i === 0 ) {
return false;
}
}
return true;
}
var arr = 2;
for ( var i = 3; i <= n; i+=2 ) {
if ( isPrime(i) ) {
arr += i;
}
}
return arr;
}
console.log(sumPrimes(10));
我要问的部分是这个特定的函数
function isPrime(num) {
for ( var i = 2; i < num; i++ ) {
if ( num % i === 0 ) {
return false;
}
}
return true;
}
尤其是有问题的这一行
num % i === 0
我能理解的是arr
是一个数组,将2之后的每个奇数相乘(例如[2,3,5,7,9,11,13,15,17]) .那么每个数字都是 运行 到 function isPrime
。我想了解的是 num % i === 0
相对于 for ( var i = 2; i < num; i++ )
的输出是什么?
输出是这样的吗?
- 3(数量) % 2(i)
- 5(数量) % 3(i)
- 7(数量) % 4(i)
- 9(数量) % 5(i)
- 11(数量)% 6(i)
%
运算符是取模运算符。它returns 除法后的余数。所以只要 n 能被 x 整除,n % x
就会为零。在此示例中,它测试该数字是否可以被任何先前数字整除。
只要 num
被 i
整除,行 num % i === 0
returns 为真
这意味着如果 num 除以 i 的其余部分等于 0,则 num 除以 1 和它本身以外的数字,则它不是素数,因此 return 错误。 ('%' 表示取模或除法余数)
for ( var i = 2; i < num; i++ ) {
console.log(`${num} % ${i} === ${num % i}`); // Extra line
if ( num % i === 0 ) {
return false;
}
}
在这段代码中,代码实际做的是遍历 2
和 num
之间的每个数字,将其分配给变量 i
,并检查是否 num
可以被 i
整除。如果是,那么它将 return false
.
%
函数(称为取模函数)基本上取两个数,return 是第一个数除以第二个数的余数。所以,例如:
5 % 2 // = 1, 5/2 = 2 with 1 left over
7 % 3 // = 1, 7/3 = 2 with 1 left over
如果余数是0
,那么显然第一个数可以被第二个数整除,因为没有剩余。所以 行 num % i === 0
正在检查整除性 ,本质上 - 它正在检查 num
是否可以被 i
.
整除
例如,当检查 5
(带有额外的 console.log
行)时,这是输出到控制台的内容:
5 % 2 === 1
5 % 3 === 2
5 % 4 === 1
这就是 6
输出的 num
:
6 % 2 === 0
(已停止,因为 false
已 return 编辑。)
%
是取模运算符。 x%y = x mod y =
x
除以y
的余数。所以 4%1=0
、4%3=1
和 4%4=0
.
因此,x%y==0
等同于"x is divisible by y"。因此循环正在检查,对于从 2
到 num - 1
的每个数字,num
是否可以被该数字整除。对于素数,答案永远是否定的。所以任何 num
可以被 i
整除的情况,它肯定不是质数。如果 num
不能被范围内的任何数字整除,那么它就是质数。
有趣的旁注:循环不必一直走到 num-1
- 它可以在 sqrt(num)
处停止(四舍五入),你明白为什么了吗?
我从另一个 post 找到了这段代码,我正试图理解这个解决方案的一部分。
function sumPrimes(n) {
function isPrime(num) {
for ( var i = 2; i < num; i++ ) {
if ( num % i === 0 ) {
return false;
}
}
return true;
}
var arr = 2;
for ( var i = 3; i <= n; i+=2 ) {
if ( isPrime(i) ) {
arr += i;
}
}
return arr;
}
console.log(sumPrimes(10));
我要问的部分是这个特定的函数
function isPrime(num) {
for ( var i = 2; i < num; i++ ) {
if ( num % i === 0 ) {
return false;
}
}
return true;
}
尤其是有问题的这一行
num % i === 0
我能理解的是arr
是一个数组,将2之后的每个奇数相乘(例如[2,3,5,7,9,11,13,15,17]) .那么每个数字都是 运行 到 function isPrime
。我想了解的是 num % i === 0
相对于 for ( var i = 2; i < num; i++ )
的输出是什么?
输出是这样的吗?
- 3(数量) % 2(i)
- 5(数量) % 3(i)
- 7(数量) % 4(i)
- 9(数量) % 5(i)
- 11(数量)% 6(i)
%
运算符是取模运算符。它returns 除法后的余数。所以只要 n 能被 x 整除,n % x
就会为零。在此示例中,它测试该数字是否可以被任何先前数字整除。
只要 num
被 i
num % i === 0
returns 为真
这意味着如果 num 除以 i 的其余部分等于 0,则 num 除以 1 和它本身以外的数字,则它不是素数,因此 return 错误。 ('%' 表示取模或除法余数)
for ( var i = 2; i < num; i++ ) {
console.log(`${num} % ${i} === ${num % i}`); // Extra line
if ( num % i === 0 ) {
return false;
}
}
在这段代码中,代码实际做的是遍历 2
和 num
之间的每个数字,将其分配给变量 i
,并检查是否 num
可以被 i
整除。如果是,那么它将 return false
.
%
函数(称为取模函数)基本上取两个数,return 是第一个数除以第二个数的余数。所以,例如:
5 % 2 // = 1, 5/2 = 2 with 1 left over
7 % 3 // = 1, 7/3 = 2 with 1 left over
如果余数是0
,那么显然第一个数可以被第二个数整除,因为没有剩余。所以 行 num % i === 0
正在检查整除性 ,本质上 - 它正在检查 num
是否可以被 i
.
例如,当检查 5
(带有额外的 console.log
行)时,这是输出到控制台的内容:
5 % 2 === 1
5 % 3 === 2
5 % 4 === 1
这就是 6
输出的 num
:
6 % 2 === 0
(已停止,因为 false
已 return 编辑。)
%
是取模运算符。 x%y = x mod y =
x
除以y
的余数。所以 4%1=0
、4%3=1
和 4%4=0
.
因此,x%y==0
等同于"x is divisible by y"。因此循环正在检查,对于从 2
到 num - 1
的每个数字,num
是否可以被该数字整除。对于素数,答案永远是否定的。所以任何 num
可以被 i
整除的情况,它肯定不是质数。如果 num
不能被范围内的任何数字整除,那么它就是质数。
有趣的旁注:循环不必一直走到 num-1
- 它可以在 sqrt(num)
处停止(四舍五入),你明白为什么了吗?