JavaScript 函式,接收數字 n 並生成包含前 n 個素數的陣列


我們需要編寫一個 JavaScript 函式,該函式接收一個數字n 並返回一個包含前n個素數的陣列。我們知道素數是指只能被 1 和自身整除的數字,例如 2、3、19、37、73 等。

讓我們用一個例子來理解這個問題:

Input: n = 6; 
Output: prime_numbers = [ 2, 3, 5, 7, 11, 13 ]

使用迭代

我們首先編寫一個函式來檢查給定的數字是否為素數,然後執行一個迴圈,直到給定的數字n 來生成n個素數。

示例

生成前幾個素數的 JavaScript 程式:

const isPrime = (n) => {
   for(let i = 2; i <= n/2; i++){
      if(n % i === 0){
         return false;
      }
   };
   return true;
};
const generatePrime = num => {
   const arr = [];
   let i = 2;
   while(arr.length < num){
      if(isPrime(i)){
         arr.push(i);
      };
      i = i === 2 ? i+1 : i+2;
   };
   return arr;
};
console.log("First 6 prime numbers are: ");
console.log(generatePrime(6));
console.log("First 16 prime numbers are: ");
console.log(generatePrime(16));

控制檯輸出:

First 6 prime numbers are: 
[ 2, 3, 5, 7, 11, 13 ]
First 16 prime numbers are: 
[
   2,  3,  5,  7, 11, 13,
  17, 19, 23, 29, 31, 37,
  41, 43, 47, 53
]

使用埃拉託斯特尼篩法

此演算法需要以下輸出:

  • 初始化一個大小為 10000 的布林陣列,其值為 TRUE。
  • 然後,從 2 開始迭代每個數字。
  • 如果一個數字仍然標記為 TRUE,則將其新增到素數陣列中,並且其所有倍數在布林陣列中標記為 FALSE。
  • 繼續此過程,直到素數陣列包含 n 個素數。

示例

讓我們看看實際實現:

function generatePrime(n) {
   const limit = 10000; 
   const arr = [];
   const newArray = new Array(limit).fill(true);
   
   for (let i = 2; i < limit; i++) {
      if (newArray[i]) {
         arr.push(i);
         for (let j = i * i; j < limit; j += i) {
            newArray[j] = false;
         }
      }
      if (arr.length === n) {
         break;
      }
   }
   return arr.slice(0, n);
}
console.log(generatePrime(10));

控制檯輸出:

[
   2,  3,  5,  7, 11,
  13, 17, 19, 23, 29
]

更新於:2024年9月30日

1K+ 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始
廣告