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+ 次浏览

启动您的 职业生涯

完成课程获得认证

开始
广告