js实现质数
判断一个数是否为质数
质数是指大于1的自然数,除了1和它本身外,没有其他正因数。以下是用JavaScript实现判断质数的方法:
function isPrime(num) {
if (num <= 1) return false;
if (num <= 3) return true;
if (num % 2 === 0 || num % 3 === 0) return false;
for (let i = 5; i * i <= num; i += 6) {
if (num % i === 0 || num % (i + 2) === 0) return false;
}
return true;
}
生成指定范围内的质数列表
以下函数可以生成从2到指定上限之间的所有质数:

function generatePrimesUpTo(max) {
const primes = [];
for (let i = 2; i <= max; i++) {
if (isPrime(i)) {
primes.push(i);
}
}
return primes;
}
埃拉托斯特尼筛法(高效算法)
对于较大的数字范围,可以使用更高效的筛法:

function sieveOfEratosthenes(max) {
const sieve = new Array(max + 1).fill(true);
sieve[0] = sieve[1] = false;
for (let i = 2; i * i <= max; i++) {
if (sieve[i]) {
for (let j = i * i; j <= max; j += i) {
sieve[j] = false;
}
}
}
return sieve.reduce((primes, isPrime, index) => {
if (isPrime) primes.push(index);
return primes;
}, []);
}
获取第n个质数
如果需要获取第n个质数,可以使用以下方法:
function getNthPrime(n) {
if (n < 1) return null;
let count = 0;
let candidate = 2;
while (count < n) {
if (isPrime(candidate)) {
count++;
if (count === n) return candidate;
}
candidate++;
}
return null;
}
性能优化提示
对于非常大的数字,可以考虑以下优化:
- 预计算并缓存已知质数
- 使用概率性测试算法(如Miller-Rabin测试)处理极大数字
- 避免不必要的计算,如偶数可以直接排除(除了2)
这些方法可以根据具体需求组合使用,例如先用简单方法处理小数字,对大数字使用更复杂的算法。






