/* -*- coding: utf-8 -*- * * 3691.cc: No.3691 Calculate Mu Sum - yukicoder */ #include #include using namespace std; /* constant */ const int MAX_N = 10000000; /* typedef */ /* global variables */ bool primes[MAX_N + 1]; int pds[MAX_N + 1], myus[MAX_N + 1]; /* subroutines */ void gen_primes(int maxp) { fill(primes, primes + maxp + 1, true); primes[0] = primes[1] = false; fill(pds, pds + maxp + 1, 0); pds[1] = 1; int p; for (p = 2; p * p <= maxp; p++) if (primes[p]) { pds[p] = p; for (int q = p * p; q <= maxp; q += p) { primes[q] = false; if (! pds[q]) pds[q] = p; } } for (; p <= maxp; p++) if (primes[p]) pds[p] = p; } /* main */ int main() { gen_primes(MAX_N); int n; scanf("%d", &n); myus[1] = 1; int sum = 1; for (int i = 2; i <= n; i++) { int j = i / pds[i]; if (j % pds[i] == 0) myus[i] = 0; else myus[i] = -myus[j]; sum += myus[i]; //printf(" myus[%d] = %d\n", i, myus[i]); } printf("%d\n", sum); return 0; }