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 ]
广告