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

  

posted @ 2020-12-03 21:28  vdk  阅读(114)  评论(0)    收藏  举报