JS - Prime数字脚本 - 解释

时间:2013-04-01 19:45:22

标签: javascript numbers

我正在学习JS并偶然发现一个脚本输出素数< 100。但我不确定我是否完全理解它是如何工作的。如果有人能够解释,我会很高兴。 :)

所以这是:

for (var counter = 0; counter <= 100; counter++)
{
    for (var i = 2; i <= counter-1; i++)
        if (counter%i === 0) break;
    if(i === counter)
        console.log(counter);
}

3 个答案:

答案 0 :(得分:1)

根据定义,素数只能被自己整除1。 外循环for var(counter = 0; ...)循环遍历从0到100的数字。 然后内循环for (var i = 2; ...)尝试将外部数字除以2和计数器值之间的每个数字。如果它们中的任何一个除了数字而没有余数,则循环被破坏。这是if (counter%i === 0) break;行。 如果我们摆脱了循环和i === counter,那么它是一个素数,否则它不是 - 根据定义。

答案 1 :(得分:1)

/* For every number from 0 to 100, do the following: */
for (var counter = 0; counter <= 100; counter++)
{
    /* Loop through values from 2 to 1 before the counter. */
    for (var i = 2; i <= counter-1; i++) {
        /* if the remainder of dividing counter by the current value of `i` is zero,
         * we know we don't have a prime, so break out of the loop:
         */
        if (counter%i === 0) break; 
    }
    /* If the loop completed and `i` is equal to the counter, that means counter is not
     * divisible by anything except for 1 and itself, making it prime
     */
    if(i === counter)
        console.log(counter);
}

答案 2 :(得分:0)

我不确定你知道多少JavaScript,所以其中一些可能非常基本。

首先,请记住素数是唯一因子为1的素数。

所以第一行说它从0到100循环,counter作为保存这个数字的变量。

下一行for (var i = 2; i <= counter-1; i++)从2循环到counter - 1(注意它不包括1和counter)并使用i来保存此数字。

接下来,if (counter%i === 0) break;测试counter是否可以被i整除:余数运算符%返回余数(例如来自长除法),例如11 % 3将返回2,因为11除以3得到3余数2;如果余数counter % i0===是一个比==更严格的平等,但这是一个完全不同的答案),这意味着counter可以被i整除{1}}所以不是素数。 break语句告诉它退出最内层循环(即i上的循环),因此程序递增counter并继续。

如果前一行没有因i的任何值而中断,则counter为素数 - 具体而言,在循环体的末尾,i递增(现在等于counter),语句i <= counter-1的计算结果为false,循环结束。所以现在i === counter为真,因此console.log(counter)在控制台中显示此值。