AOJ 0009

Prime Number | Aizu Online Judge

普通に Eratosthenes の篩を用いる.実行時に素数を数えるより,予め計算しておいたほうがはやい.

#include <iostream>
#include <array>

using namespace std;

int main() {
    const int N = 1000000;

    array<bool, N> search_array;
    array<int, N> count_array;

    search_array.fill(true);
    search_array[0] = false;
    search_array[1] = false;

    for (int i = 2; i < N; ++i) {
        // Sieve of Eratosthenes
        if (search_array[i]) {
            for (int j = 2; i * j < N; ++j) {
                search_array[i * j] = false;
            }
        }

        // count prime numbers
        count_array[i] = count_array[i - 1] + search_array[i];
    }

    int n;
    while (cin >> n) {
        cout << count_array[n] << endl;
    }

    return 0;
}