2016-07-28 53 views
2

我一直試圖通過這麼長時間的挑戰,儘管在線閱讀了多個解決方案和建議,但我似乎無法正確應用它。Javascript素數檢查

這些指令是「定義一個函數isPrime,它接受一個整數參數並根據整數是否爲素數返回true或false」。

我已經嘗試了很多東西,但是這是最遠的我已經能夠得到:

function isPrime(num) { 
    if (num <= 1) return false; 
    if (num === 2) return true; 

    for (var i = 2; i < num; i++) 
    if (num % i === 0) return false; 
    else return true; 
} 

但後來有人告訴我:「9是不是素數」

任何幫助,將不勝感激,謝謝!

+0

步驟通過您的代碼。由於'num'不小於'1',也不等於'2',所以你打了循環。所以它測試'9%2'是'1',所以它碰到'else','返回true';聲稱9是質數。顯然,它不是。 –

回答

3

您應該避免else情況,並僅在for循環完成後才返回。儘管可以通過更新條件來減少迴路計數到i <= Math.sqrt(num)(因爲@PatrickRoberts建議)。

function isPrime(num) { 
    if (num <= 1) return false; 
    if (num === 2) return true; 

    // storing the calculated value would be much 
    // better than calculating in each iteration 
    var sqrt = Math.sqrt(num); 

    for (var i = 2; i <= sqrt; i++) 
    if (num % i === 0) return false; 
    return true; 
} 

FYI:在環路num % i === 09 % 2)的第一次迭代的代碼將是false,它會返回else語句(true)。

+2

現在讓我們來談談[Eratosthenes的篩選器](https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)...因爲我們面對它,這是一個可怕的低效率的實現 –

+1

謝謝你們,這個工程很棒! –

+1

希望我可以多勞多得,非常好的答案。 –

4

問題在於for循環中的else return true;

在第一次迭代中,i爲2,在您檢查9 % i不是0之後,您執行else塊和return true

在所有迭代失敗之前,您都不應該使用return truereturn false

+0

感謝您解釋返回真實位,我終於明白了! –

-1

應該有繼續關鍵字在你的for循環(或省略else語句),但兩個if和else你有回報關鍵字。所以,你的for循環迭代只對i = 2

function isPrime(num) { 
    if (num <= 1) return false; 
    if (num === 2) return true; 

    for (var i = 2; i < num; i++) 
    if (num % i === 0) return false; 
    else continue; // omittable 

    return true; 
} 

你可以做很多事情來增加這個 代碼功能/性能。例如i < num條件在您的for循環允許非常寬的範圍內 。數量的平方根將足夠用於更高的邊界。

+2

,「else continue」在這裏沒用。 –

+0

是的,我現在但我寫這樣表示差異。 –

0
function primeNo(){ 
//"number1" is "ID" of HTML input block. 
var num2 = document.getElementById("number1").value; 
var dev = num2/2; 
var i; 
for(i=2; i < dev ; i++){ 
    if(num2%i == 0){ 
     //"ans1" is "ID of <p> where ans needs to display" 
     document.getElementById("ans1").innerHTML = "Not a Prime No"; 
     break; 
    } 
    else{ 
     document.getElementById("ans1").innerHTML = "Prime No"; 
    } 
} 

}

+0

由於「1」不在素數列表中,所以循環以2開頭。如果一個數字可以完全整除直到其數值的一半,那麼它就不是素數。如果提醒是「0」,則使用「休息」來逃脫。 –