题目:
给定整数 n
,返回 所有小于非负整数 n
的质数的数量 。
示例 1:
输入:n = 10
输出:4
解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
示例 2:
输入:n = 1
输出:0
思路:
采用埃氏筛法
创建一个 bool型数组储存数是否为质数
2x,3x,… 一定不是质数 所以把他们标记为false 标记到根号n停止。
通过观察发现 每次标记的第一个倍数都是从x^x开始的
代码:
class Solution {
public:
int countPrimes(int n) {
vector<bool> isPrime(n,true);
int count = 0;
for(int i = 2; (long long)i*i < n; i++)
{
if(isPrime[i])
{
for(int j = i*i; j < n; j += i)
{
isPrime[j] = false;
}
}
}
for(int i = 2; i < n; i++)
{
count += isPrime[i];
}
return count;
}
};