1、题目描述
输入n,返回小于n的数字中,有多少个质数。
2、思路
声明长度为n布尔型队列,初始化为false,即都是质数。
首先可以知道,除了2以外,比2大的偶数都是合数。
所以计数君sum = 1【表示统计了2】。
再从3开始,对于每个质数,都把它的小于n的所有倍数的队列值设为true。
每个质数也都要计数,最后返回计数君。
3、代码
int countPrimes(int n) {
if(n<=2) return 0;
vector<bool> v(n, false);
int sum=1;
for(int i=3;i<n;i=i+2){
if(!v[i]){
sum++;
if(i>sqrt(n)) //防止i*i超出整数范围
continue;
for(int j=i*i;j<n;j=j+i){
v[j]=true;
}
}
}
return sum;
}