埃拉托斯特尼筛法是一种高效的找出范围内所有素数的方法。
基本思想是:标记所有数 的倍数为非素数 ,剩下 的就是素数。
cpp
// 判断是否为素数
vector<bool> getIsPrime(int n) {
// 判断 找出 0 到 n 的所有素数
vector<bool> isPrime(n + 1, true);
// 0 和1 一定不适素数
isPrime[0] = isPrime[1] = false;
// 跳过偶数 偶数一定不是素数
// 这里只是 i++ 要确保 i*i 的范围不超过n
for (int i = 2; i * i <= n; i++)
{
// 如果当前为素数 那么它的倍数,
// 以及对自身的加和一定不是素数
// 2 4 6 8 16
if (isPrime[i]) {
for (int j = i*i; j <= n; j += i)
{
// 是修改 j 的值
isPrime[j] = false;
}
}
}
return isPrime;
}