Count the number of prime numbers less than a non-negative number, n.
Example:
Input: 10
Output: 4
Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.
Accepted
224,278
Submissions
784,297
就是求小于n的素数个数。
就是用素数筛求素数,以前做题经常碰到,基本是线性的解法。
比如求20以内的素数,那么我们可以这样做,第一遍把能整除2的去除掉。
2, 4, 6, 8, 10, 12, 14, 16, 18, 20
然后开始第二轮
3, 6, 9, 12, 15, 18
然后 4 已经被剔除了,那么继续
5,10,15,20
然后6没了。从7
7, 14
然后 8,9,10,被剔除了,从11开始
11
这样一次 13,17,19
最后就得到了20以内的所有素数。
代码:
class Solution
{
public:
int countPrimes(int n)
{
vector<int> prime;
vector<int> is_prime(n,true);
for(int i = 2; i < n; i++)
{
if(is_prime[i])
{
prime.push_back(i);
for(int j = i + i; j < n; j += i)
is_prime[j] = false;
}
}
// for(auto &var : prime)
// cout << var << " ";
// cout << endl;
return prime.size();
}
};
566

被折叠的 条评论
为什么被折叠?



