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