您的位置:首页 > 其它

【leetcode】204. Count Primes

2016-07-03 23:56 288 查看
一、题目描述

Description:

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

题目解读:给一个数n,求出比n小的所有质数的总数

思路:使用找质数算法之埃拉托色尼筛选法(Sieve
of Eratosthenes算法),详细可以查看http://blog.csdn.net/xiaoquantouer/article/details/51817803

用一个bool数组,存储n个数的状态,初始化都为true,然后从2开始,如果2的状态为true,就开始遍历比n小的所有的2的倍数,将其全部置为false。把2的倍数遍历完后,继续往下找下一个状态为true的数,即3,遍历比n小的所有的3的倍数(按3*3,3*4,3*5这样遍历,注意不需要从3*2开始了)。.....最后剩下的状态为true的数全为质数。

c++代码(56ms,80.83%)

class Solution {
public:
int countPrimes(int n) {
if(n<=1) //小于等于1的都不是质数
return 0;
bool* a = new bool[n+1];
for(int i=0; i<n; i++)
a[i] = true;
for(int i=2; i*i<n; i++){
if(a[i] == true){
for(int j=i; i*j<n; j++){
a[i*j] = false;
}
}//if
}//for
int result =0;
for(int i=2; i<n; i++){
if(a[i])
result++;
}//for
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: