#include using namespace std; #include using namespace atcoder; using ll = int64_t; using ul = uint64_t; using ld = long double; using vi = vector; using vd = vector; using vc = vector; using vs = vector; using vb = vector; using vl = vector; using vvi = vector; using vvd = vector; using vvc = vector; using vvb = vector; using vvl = vector; using mint = modint998244353; using vm = vector; // エラトステネスの篩みたいにやるのか void sieve(int N, vb &del) { for (int p = 2; p*p <= N; p++) { if (del[p]) continue; for (int a = p*p; a <= N; a += p) { del[a] = true; } } return; } int main() { int N; cin >> N; vb del(N + 1, false); sieve(N, del); vi mu(N + 1, 1); for (int a = 2; a <= N; a++) { if (del[a]) continue; for (int b = 1; a*b <= N; b++) { if (b%a == 0) mu[a*b] = 0; else mu[a*b] *= -1; } } int ans = 0; for (int i = 1; i <= N; i++) { ans += mu[i]; } cout << ans << endl; return 0; }