[LeetCode] 204. Count Primes

来源:互联网 发布:怎样利用网络做直销 编辑:程序博客网 时间:2024/06/02 12:49

问题描述:

 

给定一个非负整数n,请求出小于n的素数的个数。

 

解题关键: 厄拉多塞筛法

STEP1: 建立从2到n的集合SET={2, 3, 4, ..., n}

STEP2: 每次从集合SET中取出最小的数A,这个数就是质数;

STEP3: 然后将集合中所有A的倍数删去,得到一个新的集合G',

重复上述步骤直到集合为空。


class Solution {public:    int countPrimes(int n) {        vector<bool> bvec(n, true);        bvec[0] = false, bvec[1] = false;        int k =  2, cnt = 0;                while (k < n) {            for (; k < n && bvec[k] == false; k++)                ;                        if (k == n)                break;                        cnt++;                        for (int zoom = 1; zoom * k < n; zoom++)                bvec[zoom * k] = false;        }        return cnt;    }};



原创粉丝点击