温馨提示:这篇文章已超过287天没有更新,请注意相关的内容是否还可用!
质数是指大于1且只能被1和自身整除的整数。在编写JavaScript代码时,我们可以使用一些算法来统计给定范围内的质数。
一种常见的算法是埃拉托斯特尼筛法(Sieve of Eratosthenes),该算法通过不断筛选掉非质数来找到质数。具体步骤如下:
1. 创建一个长度为n+1的布尔数组isPrime,并将所有元素初始化为true。数组的下标表示数字,数组的值表示该数字是否为质数。
2. 将isPrime[0]和isPrime[1]设置为false,因为0和1不是质数。
3. 从2开始遍历数组,如果isPrime[i]为true,则将i的所有倍数(除了i本身)设置为false,因为它们不是质数。
4. 遍历完数组后,isPrime中为true的元素即为质数。
下面是使用埃拉托斯特尼筛法统计质数的示例代码:
function countPrimes(n) {
// 创建布尔数组,长度为n+1,并初始化为true
let isPrime = new Array(n+1).fill(true);
// 将0和1设置为false
isPrime[0] = false;
isPrime[1] = false;
// 遍历数组
for (let i = 2; i <= Math.sqrt(n); i++) {
// 如果isPrime[i]为true,则将i的所有倍数设置为false
if (isPrime[i]) {
for (let j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
// 统计isPrime中为true的元素个数
let count = 0;
for (let i = 0; i <= n; i++) {
if (isPrime[i]) {
count++;
}
}
return count;
}
console.log(countPrimes(10)); // 输出4,即小于等于10的质数个数为4
在上述代码中,我们首先创建了一个布尔数组isPrime,长度为n+1,并将所有元素初始化为true。然后,我们将0和1设置为false,因为它们不是质数。
接下来,我们从2开始遍历数组。如果isPrime[i]为true,则说明i是质数,我们将i的所有倍数(除了i本身)设置为false,因为它们不是质数。这样,遍历完数组后,isPrime中为true的元素即为质数。
我们遍历isPrime数组,统计其中为true的元素个数,即为小于等于n的质数个数。
需要注意的是,在遍历数组时,我们只需要遍历到Math.sqrt(n)即可,因为大于Math.sqrt(n)的数的倍数已经被之前的质数筛选过了。
埃拉托斯特尼筛法是一种高效的质数统计算法,时间复杂度为O(nloglogn)。它利用了质数的性质,通过筛选掉非质数的方法,可以快速地统计给定范围内的质数个数。