簡體   English   中英

Javascript:找到前 n 個素數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM