n以内质数的个数(不包括n)(LeetCode-204)
素数筛选法:
… …2的倍数都不是质数,
… …从i=3开始
… …while : i <= sqrt(n)
… … 当i是质(素)数的时候,i的所有的倍数必然是合数;
… … …i ++;
int countPrimes(int n) {
if(n < 3) return 0;
bool *arr = new bool[n];
for(int i = 2;i < n;i++){
if(i % 2)
arr[i] = true;
else
arr[i] = false;
}
int cnt = n >>1;
for(int t = 3;t <= sqrt(n);t++){
if(arr[t]){
int pos = t + t;
while(pos < n){
if(arr[pos]){
cnt --;
arr[pos] = false;
}
pos += t;
}
}
}
return cnt;
}