Skip to content
质数筛

质数筛

cpp
//埃氏筛
std::vector<int> eratosthenesSieve(int n) {
    std::vector<bool> isPrime(n + 1, true);
    std::vector<int> primes;
    if (n < 2) return primes;

    isPrime[0] = isPrime[1] = false;

    for (int i = 2; i * i <= n; ++i) {
        if (isPrime[i]) {
            // 从 i * i 开始标记,避免重复标记小于 i^2 的倍数
            for (int j = i * i; j <= n; j += i) {
                isPrime[j] = false;
            }
        }
    }

    for (int i = 2; i <= n; ++i) {
        if (isPrime[i]) {
            primes.push_back(i);
        }
    }
    return primes;
}