2013-04-01 51 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); 
}