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;
}
当我运行此代码时,它似乎陷入无限循环并且不返回任何内容......为什么?
答案 0 :(得分:3)
尝试将此行放在第二个循环之前:
var divisorFound = false;
这条线可以访问它:
if (divisorFound == false) {array.push(i);}
注意固定array.push(i),如NPE所说。 :)
您可能希望阅读JavaScript中的Variable Scope。
答案 1 :(得分:1)
在您的代码中,array.push[i]
(带方括号)不符合您的要求。它保持数组不变并返回undefined
。
您的意思是array.push(i)
(带括号)。
答案 2 :(得分:1)
这不是最先进的方法。使用筛子会更好。然而,这是相当不错的,并为接近素数代码挑战提供了一个良好的起点。
/*
* 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
}
}
答案 3 :(得分:0)
此外,您永远不会为array
定义长度,因此for循环无法知道何时停止。
答案 4 :(得分:0)
实际上如果你只检查它的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)
答案 5 :(得分:0)
<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>
答案 6 :(得分:-1)
imana97 answare不正确,因为“1”不是素数,而“2”就是素数。 所以,我的更正版本是:
(function(n){
var primes=[2];
for (var i=3;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)