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; } };