质数筛

1.埃拉托斯特尼筛法
vector sieve(int n) {
vector is_prime(n + 1, true);
is_prime[0] = is_prime[1] = false;

for (int i = 2; i * i <= n; i++) {
if (is_prime[i]) {
for (int j = i * i; j <= n; j += i) {
is_prime[j] = false;
}
}
}
return is_prime;
}
2. 欧拉筛/线性筛
vector linear_sieve(int n) {
vector is_prime(n + 1, true);
vector primes;

for (int i = 2; i <= n; i++) {
if (is_prime[i]) {
primes.push_back(i);
}
for (int j = 0; j < primes.size() && i * primes[j] <= n; j++) {
is_prime[i * primes[j]] = false;
if (i % primes[j] == 0) break; // 关键步骤
}
}
return primes;
}

posted @ 2025-11-04 15:26  thy825  阅读(12)  评论(0)    收藏  举报