📅  最后修改于: 2023-12-03 15:26:12.584000             🧑  作者: Mango
在 JavaScript 中,计算整数是否为素数可以使用多种方法。本文将介绍两种基本的算法和其实现方式。
试除法是最简单的一种算法,其基本思想是对于一个整数 n,判断 n 是否可以被 2 至 n-1 中的任意整数整除。如果整除则说明 n 不是素数,否则说明 n 是素数。
以下是 JavaScript 的实现代码片段:
function isPrime(num) {
// 不处理小于2的数
if (num < 2) {
return false;
}
// 筛除偶数
if (num % 2 === 0) {
return num === 2;
}
// 从3开始判断奇数是否为素数
for (let i = 3; i <= Math.sqrt(num); i += 2) {
if (num % i === 0) {
return false;
}
}
return true;
}
上述代码的时间复杂度为 O(sqrt(n))。
埃氏筛法是最经典的一种算法,其基本思想是从 2 开始,将每个素数的倍数都标记成合数,然后依次枚举每个数,如果它没有被标记成合数,就是素数。
以下是 JavaScript 的实现代码片段:
function sieveOfEratosthenes(n) {
const primes = new Array(n + 1).fill(true);
primes[0] = false;
primes[1] = false;
for (let i = 2; i <= Math.sqrt(n); i++) {
if (primes[i]) {
for (let j = i * i; j <= n; j += i) {
primes[j] = false;
}
}
}
return primes.reduce((acc, cur, i) => {
if (cur) {
acc.push(i);
}
return acc;
}, []);
}
上述代码的时间复杂度为 O(nloglogn)。
两种算法都是用于判定整数是否为素数的基本方法,其中试除法时间复杂度较低,适用于小的范围内的素数判定。埃氏筛法时间复杂度较高,但可以在一定范围内快速筛选出素数。在实际开发中可以根据需要选择不同的算法处理。