埃氏筛 - Sieve of Eratosthenes

埃氏筛,快速筛素数

算法描述

要筛出 范围内的素数,我们只需要将 范围内的素数的所有 的倍数删除即可。

因为素数是递增的,事实上只需要从 开始筛,就能保证后面遇到的未被删除的第一个数都是素数

实现

1
2
3
4
5
6
7
int n;
vector<bool> isPrime(n + 1, true);
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i <= n; i++) {
if (!isPrime[i]) continue;
for (int j = i * i; j <= n; j += i) isPrime[j] = false;
}