#include using namespace std; #define int long long #define endl "\n" const int N = 110; /* 10 36 1000000000000000000 4 9 1001003332 */ // 筛法求莫比乌斯函数 int mu[N], sum[N]; int primes[N], cnt; bool st[N]; void get_mobius(int n) { mu[1] = 1; for (int i = 2; i <= n; i++) { if (!st[i]) { primes[cnt++] = i; mu[i] = -1; } for (int j = 0; primes[j] <= n / i; j++) { int t = primes[j] * i; st[t] = true; if (i % primes[j] == 0) { mu[t] = 0; break; } mu[t] = mu[i] * -1; } } // 维护u(x)前缀和 // 这玩意有啥用? for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + mu[i]; } signed main() { // 筛法求莫比乌斯函数 get_mobius(N - 1); int T; while (cin >> T) { int s = 1; for (int i = 2; i <= 64; i++) s -= mu[i] * (int)(pow(T * 1.0, 1.0 / i) - 1); cout << s << endl; } }