:heavy_check_mark: 素数列挙 (Math/enumerate_primes.hpp)

enumerate_primes

vector<long long> enumerate_primes(long long n)

エラトステネスの篩によってn以下の素数を計算し、返します。

制約

  • $0 \lt n$

計算量

  • $O(n \log \log n)$

Verified with

Code

#include <bits/stdc++.h>
using namespace std;

vector<long long> enumerate_primes(long long n)
{
    assert(0 < n);

    vector<long long> primes;
    vector<bool> isChecked(n + 1, false);
    isChecked[0] = isChecked[1] = true;
    for (long long i = 2; i <= n; i++)
    {
        if (isChecked[i])
        {
            continue;
        }

        primes.push_back(i);
        isChecked[i] = true;

        for (long long j = i * i; j <= n; j += i)
        {
            if (!isChecked[j])
            {
                isChecked[j] = true;
            }
        }
    }

    return primes;
}
#line 1 "Math/enumerate_primes.hpp"
#include <bits/stdc++.h>
using namespace std;

vector<long long> enumerate_primes(long long n)
{
    assert(0 < n);

    vector<long long> primes;
    vector<bool> isChecked(n + 1, false);
    isChecked[0] = isChecked[1] = true;
    for (long long i = 2; i <= n; i++)
    {
        if (isChecked[i])
        {
            continue;
        }

        primes.push_back(i);
        isChecked[i] = true;

        for (long long j = i * i; j <= n; j += i)
        {
            if (!isChecked[j])
            {
                isChecked[j] = true;
            }
        }
    }

    return primes;
}
Back to top page