leetcode204. 计数质数

虽然说这是个简单题,但他通过率低啊。我估计别人都是传统方法一个一个试,而这题目又要求算五百万。
假定所有数都是质数,遍历所有目前认为的质数即从2开始找2的倍数4、6、8标记为合数,接下来找3的倍数。。。。到4就不必寻找因为在之前找2的倍数时,4已被标为合数,4的倍数都已经被标记过了。所以接着找5的。。。。
class Solution {
public:
int countPrimes(int n) {
int i;
bool t[5000001];
t[0]=t[1]=false;
for(i=2;i<=n;i++){
t[i]=true;
}
int j;
int sum=0;
for(i=2;i<=n-1;i++){
if(t[i]){
sum++;
for(j=i*2;j<=n;j+=i){
t[j]=false;
}
}
}
return sum;
}
};

浙公网安备 33010602011771号