#include <iostream>
#include <vector>

using namespace std;

// エラトステネスの篩 : [0, n] の素数表を返す
// 計算時間 O(n log log n), 領域 O(n)
vector<bool> SieveOfEratosthenes(const int n) {
    vector<bool> 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;
}

// i \in [0, n] 以下の素数の数を求める
// 計算時間 O(n log log n), 領域 O(n)
vector<int> CountPrime(const int n) {
    vector<bool> is_prime = SieveOfEratosthenes(n);
    vector<int> count(n + 1);

    for (int i = 2; i <= n; ++i)
        count[i] += count[i - 1] + is_prime[i];

    return count;
}


int main() {
    cin.tie(0); ios::sync_with_stdio(false);

    auto cnt_prime = CountPrime(999999);
    int n;
    while (cin >> n)
        cout << cnt_prime[n] << '\n';

    return 0;
}


