质数筛

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  阅读(9)  评论(0)    收藏  举报