2013-04-01 35 views
0

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

所以在这里,它是:

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); 
} 
+0

这可能有助于:http://www.w3schools.com/js/js_loop_for.asp - 了解循环。 – tymeJV

回答

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;测试是否通过counteri整除:余量操作者%返回余(如从长除法),例如11 % 3将返回2,因为11除以3给出3余数2;如果余额counter % i0===是比==更严格的平等,但这完全是不同的答案),这意味着counter可以被i整除,因此不是总理。 break语句告诉它退出最内层循环(即循环遍历i),所以程序增量为counter并继续。

如果前行并没有为i任何价值突破,那么counter是首要 - 具体而言,在循环体的结束,i递增(现在等于counter),声明i <= counter-1计算结果为false,并循环结束。所以现在i === counter是真的,所以console.log(counter)在控制台中显示这个值。

+0

谢谢!这为我更加直观地解释了2nd Loop的Counter-1。 –

1

素数是根据定义仅整除自己和1. 外环for var(counter = 0; ...)循环通过从0数到100 内环for (var i = 2; ...)然后尝试将外部数字除以2与计数器值之间的每个数字。如果它们中的任何一个将该数字除以余数,则该循环被破坏。这是if (counter%i === 0) break;行。 如果我们打破了循环和i === counter,这是一个主要的,否则它不是 - 根据定义。

+0

谢谢。反击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); 
}