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++ ) 的输出是什么?

输出是这样的吗?

%运算符是取模运算符。它returns 除法后的余数。所以只要 n 能被 x 整除,n % x 就会为零。在此示例中,它测试该数字是否可以被任何先前数字整除。

只要 numi

整除,行 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;
    }
}

在这段代码中,代码实际做的是遍历 2num 之间的每个数字,将其分配给变量 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=04%3=14%4=0.

因此,x%y==0等同于"x is divisible by y"。因此循环正在检查,对于从 2num - 1 的每个数字,num 是否可以被该数字整除。对于素数,答案永远是否定的。所以任何 num 可以被 i 整除的情况,它肯定不是质数。如果 num 不能被范围内的任何数字整除,那么它就是质数。

有趣的旁注:循环不必一直走到 num-1 - 它可以在 sqrt(num) 处停止(四舍五入),你明白为什么了吗?