[英]Javascript: find first n prime numbers
function primeNumbers(n) {
array = [];
for (var i = 2; array.length < n; i++) {
for (var count = 2; count < i; count++) {
var divisorFound = false;
if (i % count === 0) {
divisorFound = true;
break;
}
}
if (divisorFound == false) {array.push[i];}
}
return array;
}
當我運行這段代碼時,它似乎陷入了無限循環並且沒有返回任何東西......為什么?
嘗試將此行放在第二個循環之前:
var divisorFound = false;
以便此行可以訪問它:
if (divisorFound == false) {array.push(i);}
請注意 NPE 所說的 FIXED array.push(i) 。 :)
您可能想閱讀 JavaScript 中的變量范圍。
在您的代碼中, array.push[i]
(帶方括號)不會執行您想要的操作。 它使數組保持不變並返回undefined
。
你的意思是array.push(i)
(帶括號)。
這不是執行此操作的最先進方法。 用篩子會更好。 然而,這是相當不錯的,並且為解決質數代碼挑戰提供了一個很好的起點。
/*
* Get the first n prime numbers
*
* @param n Number (integer)
* @return Array
*
*/
function getNprimes(n){
const arr = [];
let i = 2
while (arr.length < n) {
if (isPrime(i)) {
arr.push(i)
}
i++
}
return arr;
/*
* @param n (integer)
* @return Boolean
*
*/
function isPrime(n) {
if ( n < 2 ) {
return false
}
for ( let i = 2; i <= Math.sqrt(n); i++ ) {
if ( n % i === 0 ) {
return false;
}
}
return true
}
}
此外,您永遠不會為array
定義長度,因此 for 循環無法知道何時停止。
實際上,如果你只檢查它的 sqrt(n),找到 n 個素數它會更加優化 [o(n*sqrt(m))]。 如果它不能被 n 的平方根整除,它也不能被 n 整除。 這是一個例子:
(function(n){ var primes=[]; for (var i=1;i<n;i++){ var prime=true; var rootI=Math.sqrt(i)+1; for (var j=2;j<rootI;j++){ if (i%j==0) {prime=false;break;} }; if (prime) primes.push(i); } document.write(primes.join('-')); })(100000)
imana97 answare 不正確,因為“1”不是素數,而“2”是。 此外,它們不是前 n 個數字,而是小於 n 的素數。
所以,我更正的版本是:
(function(n){ var primes=[2]; for (var i=2;primes.length<n;i++){ var prime=true; var rootI=Math.sqrt(i)+1; for (var j=2;j<rootI;j++){ if (i%j==0) {prime=false;break;} }; if (prime) primes.push(i); } document.write(primes.join('-')); })(10000)
<script>
// first n prime numbers
function checkPrime(number){
let temp=2;
while(temp<number){
if(number%temp == 0){
return false;
}
temp++;
}
return true;
}
function firstnPrime(number){
var count=0;
for(var i=2;i<=number;i++){
if(checkPrime(i)){
count++;
}
}
return count;
}
console.log(firstnPrime(100));
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.