题目:给定n,输出小于n的数中,质数的个数
分析:就用传说中的筛石头的方法,每次把i的倍数的数给删掉。
答案:
class Solution {
public:
int countPrimes(int n) {
if (n < 3)
return 0;
bool *p=new bool[n];
memset(p, 1, n*sizeof(bool));
for (int i = 2; i < sqrt((double)n); i++){
for (int j = i*i; j < n ; j +=i){
p[j] = 0;
}
}
int res = 0;
for (int i = 2; i< n; i ++){
if (p[i])
res += 1;
}
delete []p;
return res;
}
};
注意:当p为int类型时,是不能用
memset(p, 1, n*sizeof(int));
来将数组初始化为1的,因为memset只能按byte初始化,而int是4byte的。