思路:普通的做法肯定超时,这里介绍厄拉多塞筛法,非常适用于质数的题; 比如说求20以内质数的个数,首先0,1不是质数.2是第一个质数,然后把20以内所有2的倍数划去.2后面紧跟的数即为下一个质数3,然后把3所有的倍数划去.3后面紧跟的数即为下一个质数5,再把5所有的倍数划去.以此类推.
int countPrimes(int n)
{
vector<bool> rec(n, true);
int i = 2, count = 0;
//厄拉多塞筛法主体
while (i < n)
{
if (rec[i])
{
count++;
int j = 2 * i;
while (j < n)
{
rec[j] = false;
j += i;
}
}
i++;
}
return count;
}