2013-08-03 33 views
0

有人可以幫助使用此代碼嗎?它應該得到第10,001個素數。我知道is_prime函數可用於測試數字是否爲素數,因爲我成功地將此代碼用於以前的問題。現在我只是試圖在for循環中調用它,直到計數器達到我想要的值,同時將最新的數字存儲到變量「持有人」和最後的印刷持有人中。歐拉7 Javascript

function is_prime(num) { 
    if (isNaN(num)) return false; 
    for (var i=2; i<=Math.sqrt(num); i++) { 
     if (num % i === 0) { 
      return false; 
     } 
    } 
    return true; 
} 

function getBigPrime() { 
var holder = 0; 
var counter = 0; 
    for (var k=3; counter<=10000; k+=2) { 
     if (is_prime(k)) 
      holder = k; 
      counter += 1; 
    } 
    console.log(holder); 
} 

getBigPrime(); 
+0

http://stackoverflow.com/questions/16074244/finding-the-10001st-prime的可能的複製-number-project-euler – CBIII

+0

我不認爲循環正常工作。如果我將循環的for語句中的'counter'更改爲不同的數字,我的結果不會改變。 –

+0

@CBIII謝謝你指點,我沒有找到那個。似乎他使用一種不同的方法,我仍然很困惑,爲什麼我的代碼不起作用! –

回答

0

您有計數器的範圍錯誤。 爲了您的for循環可以初始化counter = 1;佔2和保留原樣

http://jsfiddle.net/XtTYm/2/

function is_prime(num) { 
    if (isNaN(num)) return false; 
    var sq = Math.sqrt(num); 
    for (var i=2; i<=sq; i++) { 
     if (num % i === 0) { 
      return false; 
     } 
    } 
    return true; 
} 

    function getBigPrime() { 
    var holder = 0; 
    var counter = 1; 
     for (var k=3; counter<=10000; k+=2) { 
      if (is_prime(k)){ 
       holder = k; 
       counter += 1; // should be inside the if 
      } 
     } 
     console.log(holder); 
    } 

    getBigPrime(); 
+0

您通過省略'var'將'sq'放入全局範圍。 – Blender

+0

啊是的。謝謝。快速編輯和什麼不是。 – CBIII

2

如果省略if塊的括號,則只有第一行實際上是塊的一部分。您當前的if語句具有這樣的:

if (is_prime(k)) { 
    holder = k; 
} 

counter += 1; 

此外,你的循環跳過2,第一個素數。

+0

也是很好的說明,謝謝 –