题目:
难度:Easy
相关话题:哈希表
、数学
统计所有小于非负整数n 的质数的数量。
示例:
输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
思路:
厄拉多塞筛法,比Math.sqrt
+for in primes
加起来还快。
它是定义一个数组notPrime
,表示非质数的数,0
和1
不是质数。
接着2
是第一个质数,然后把范围内所有2的倍数在notPrime[2的倍数]=true
,
接着3
不在notPrime
范围内,因此是下一个质数,然后把3所有的倍数设置为true
以此类推…
/**
* @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
* @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
* @param {number} n
* @return {number}
*/
var countPrimes = function(n) {
let notPrime = new Array(n);
let count = 0;
notPrime[0] = true;
notPrime[1] = true;
for (let i = 1; i < n; i=i+2){
if (!notPrime[i]){
count++;
// 对当前质数的所有倍数都定义为非质数,这里从 i*i开始,因为之前的已经计算过了
for (let j = i*i; j < n; j += i){
notPrime[j] = true;
}
}
}
return n>2?count+1:count;
};