您的位置:首页 > 其它

[LeetCode] 204. Count Primes

2017-06-19 15:53 274 查看
问题描述:

 

给定一个非负整数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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: