Prime函数中此条件的输出是什么?

时间:2017-07-28 23:06:45

标签: javascript function primes

我从另一篇文章中找到了这段代码,我试图理解这个解决方案的一部分。



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));
&#13;
&#13;
&#13;

我要问的部分是这个特殊的功能

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 === 0for ( var i = 2; i < num; i++ )相关的输出是什么?

输出是这样的吗?

  • 3(num)%2(i)
  • 5(num)%3(i)
  • 7(num)%4(i)
  • 9(num)%5(i)
  • 11(num)%6(i)

4 个答案:

答案 0 :(得分:2)

from facebookads import FacebookAdsApi
from facebookads.adobjects.user import User

my_app_id = 'my_app_id'
my_app_secret = 'my_app_secret'
my_access_token = 'my_access_token'

FacebookAdsApi.init(my_app_id, my_app_secret, my_access_token)

me = User(fbid='me')
my_accounts = list(me.get_ad_accounts())

print my_accounts

在此代码中,代码实际执行的是它遍历for ( var i = 2; i < num; i++ ) { console.log(`${num} % ${i} === ${num % i}`); // Extra line if ( num % i === 0 ) { return false; } } 2之间的每个数字,将其分配给变量num,并检查{{1} } {}可以被i整除。如果是,那么它将返回num

i函数(称为模数函数),基本上取两个数字,并在除以第二个数字时返回第一个数字的余数。所以,例如:

false

如果余数为%,那么显然第一个数字可以被第二个数字整除,因为没有剩下的东西。所以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。)

答案 1 :(得分:0)

%运算符是模数运算符。它返回除法后的余数。因此,只要n可以被x整除,n % x就会为零。在这个例子中,它正在测试该数字是否可以被任何先前的数字整除。

num % i === 0只要num可以整除i

,就会返回my %repl = ( HOSTGROUP => $row[3], TOOLNAME => $row[4], VERSION => $row[5], ); my $pat = join '|', map quotemeta, keys %repl; my $re = qr/\$($pat)\b/; $row[0] =~ s/$re/$repl{$1}/g;

答案 2 :(得分:0)

这意味着如果num除以i的其余部分等于0,那么num除以1以外的数字本身,那么它不是一个主要的nubmer,所以返回false。 ('%'表示模数或其余的除法)

答案 3 :(得分:0)

%是模数运算符。当x%y = x mod y =除以x时的余数y。所以4%1=04%3=14%4=0

因此,x%y==0相当于“x可被y整除”。因此,循环正在检查,对于从2num - 1的每个数字,num可以被该数字整除。对于素数,答案永远是否定的。因此,num可以被i整除的任何情况下,它绝对不是素数。如果num不能被范围内的任何数字整除,那么它就是素数。

有趣的旁注:循环不必一直到num-1 - 它可能会停在sqrt(num)(四舍五入),你知道为什么吗?