要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。
算法思想:
先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去......
// 埃拉托斯特尼筛法,生成所有小于等于n的素数
vector<int> generatePrimes(int n) {vector<bool> is_prime(n + 1, true);vector<int> primes;is_prime[0] = is_prime[1] = false;for (int i = 2; i <= n; i++) {if (is_prime[i]) {primes.push_back(i);for (int j = i * i; j <= n; j += i) {is_prime[j] = false;}}}return primes;
}