题意理解
求小于n的质数数量
问题分析
用筛法求,用一个n长度vector初始化为1,每个元素对应1(是质数),0(不是质数)。先除以2,再除以3。。。直到除以sqrt(n)为止。然后将vector和累加。
其他
链接
int countPrimes(int n) {
if (n <= 1) return 0; //长度0,或1,没有质数
vector<int> flags(n, 1); //设置vector保存质数判断结果
int end = sqrt(n); //得到平方根,用于筛法的除数
for(int i = 2; i <= end; i++) //循环除数
{
for(int j = i; j * i < n; j ++) //循环除数倍数,小于n
{
flags[j * i] = 0; //倍数都不是质数
}
}
return accumulate(flags.begin() + 2, flags.end(), 0); //functional的accumulate来累加。
}