2
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;
}

当我运行这段代码时,它似乎陷入了无限循环并且没有返回任何东西......为什么?

4

7 回答 7

3

尝试将此行放在第二个循环之前:

var divisorFound = false;

以便这一行可以访问它:

if (divisorFound == false) {array.push(i);}

注意 NPE 所说的 FIXED array.push(i) 。:)

您可能想了解JavaScript 中的变量作用域

于 2013-06-29T16:26:01.813 回答
1

在您的代码中,array.push[i](带方括号)不会做您想做的事情。它使数组保持不变并返回undefined

你的意思是array.push(i)(带括号)。

于 2013-06-29T16:14:21.350 回答
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
  }

}
于 2017-08-31T16:10:33.517 回答
0

Also, you never define a length for array, so the for loop can't know when to stop.

于 2013-06-29T16:31:49.587 回答
0

实际上,如果你只检查它的 sqrt(n),它会更优化 [o(n*sqrt(m))] 来找到 n 个素数。如果它不能被 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)

于 2015-06-08T23:21:36.647 回答
0

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)

于 2016-01-31T10:24:20.340 回答
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>
于 2019-12-30T18:07:36.880 回答