您的位置:首页 > 其它

Count Primes

2015-10-08 22:45 281 查看
Description:

Count the number of prime numbers less than a non-negative number, n.

Credits:

Special thanks to @mithmatt for adding this problem and creating all test cases.

思路:采用筛选法,先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一 个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一 直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。代码如下:

class Solution {
public:
int countPrimes(int n) {
int i,j, count = 0;
bool *prime = new bool[n+1];
for(i=2; i<n; i++)
if(i%2 || i == 2){
prime[i]=true;
count++;
}
else
prime[i]=false;

for(i=3; i*i < n; i++){
if(prime[i])
for(j=i+i; j < n; j+=i){
if(prime[j]) count--;
prime[j]=false;
}
}
return count;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: