整体思路是埃氏筛 但外层循坏不必到n,而是到√n即可,内层循环则从i^2开始,每次递增i
注:在初始化isprime数组时,如果用memset可能会出错
int countPrimes(int n) {
if (n <= 2)
return 0;
n--;
int count = 0;
bool *isprime = new bool[n+1];
for (int i=0; i<n+1; ++i)
isprime[i] = true;
for (int i = 2; i <= sqrt(n); ++i)
{
if (isprime[i])
for (int j = i*i; j<=n; j+=i)
{
isprime[j] = false;
}
}
for (int i=2; i<=n; ++i)
count += isprime[i];
return count;
}