2015-12-23 49 views
0

道歉,如果這已被覆蓋的地方。我在這裏搜索了許多素數函數的答案,但似乎無法找到我問題的答案。我拼湊了一個函數來檢查一個數是否爲素數,然後我爲100以下的數字運行for循環並打印出素數。我的代碼不打印素數。它似乎開始打印素數,但隨後在那裏拋出9,並且從那裏變得更糟。Javascript Prime Number功能控制檯問題

我發現代碼與我的代碼看起來完全一樣,它能夠成功地將素數打印到控制檯。以下是我的代碼;我的錯誤在哪裏?爲了記錄我使用jsfiddle,而且我對此很新穎。

function isPrime(number) { 
    if (number < 2) { 
    return false; 
    } 
    for (var i = 2; i < number; i++) { 
    if (number % i == 0) { 
     return false; 
    } else { 
     return true; 
     } 
    } 
}; 

for (var i = 0; i < 100; i++) { 
    if(isPrime(i)) { 
    console.log(i); 
    } 
} 
+1

一個「速度」改善確定黃金的這種緩慢的方法...只需要循環達'Math.sqrt(號); ' - 雖然 –

回答

0

您儘快返回TRUE number不整除i。移動你的return true到最後:

function isPrime(number) { 
    if (number < 2) return false; 

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

您只希望當你沒有找到i劃分number返回true。

+1

這麼小的數字不是問題,爲什麼這被低估?這是正確的 – Saba

+0

謝謝!這使它工作!另外,Jaromanda X的好點,我也會解決這個問題。 – Frances

+1

對不起,當時沒有想直,評論刪除 –

-2
function isPrime(number) { 
var check=true; 
    if (number < 2) { 
    return false; 
    } 
    for (var i = 2; i < number; i++) { 
    if (number % i == 0) { 
     check=false; 
    } 
    } 
    return check; 
}; 

for (var i = 0; i < 100; i++) { 
    if(isPrime(i)) { 
    console.log(i); 
    } 
} 
+0

不!一旦設置爲false,您不能將支票設置爲true。 – lex82

0

function isPrime(number) { 
 
    var result = true; 
 
    if (number < 2) { 
 
    result = false; 
 
    } 
 
    for (var i = 2; i < number; i++) { 
 
    if (number % i == 0) { 
 
     result = false; 
 
    } 
 
    } 
 
    return result; 
 
}; 
 

 
for (var i = 0; i < 100; i++) { 
 
    if(isPrime(i)) { 
 
    console.log(i); 
 
    } 
 
}

+0

是的,你已經糾正它;但是當你用'result = false'替換'return false'時,速度會更糟糕。 –

0

你的問題是

if (number % i == 0) { 
    return false; 
} else { 
    return true; 
} 

正如你在任何情況下(true或false)返回的東西,每月的第一個週期的算法退出。

你不應該在else語句返回任何東西:

if (number % i == 0) { 
    return false; 
} else { 
    // continue the for statement. 
} 

,並得到函數的後返回true。

爲笑談,更快的算法是:

function isPrime(number) { 
    var primes=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]; 
    if (primes.indexOf(number) > -1) { 
     return true; 
    } else { 
     return false; 
    } 
};