func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long inf = 1ll << 62;   struct Query {     long long n;     int id;     Query(long long _n = 0, int _id = 0) : n(_n), id(_id) {}     inline bool operator<(const Query& rhs) const { return n > rhs.n; }   } qry[100010];   long long ans[100010];   vector<pair<long long, int> > dic[65];   inline long long qpow(long long base, int pw) {     long long res = 1;     while (pw) {       if (pw & 1) {         if (res < inf / base)           res = res * base;         else           return inf;       }       if (pw > 1) {         if (base < inf / base)           base = base * base;         else           return inf;       }       pw >>= 1;     }     return res;   }   inline long long get_sqrt(long long x) {     long long l = 1, r = 1000000001ll;     while (r - l > 1) {       long long mid = (l + r) >> 1;       if (mid * mid <= x)         l = mid;       else         r = mid;     }     return l;   }   bool notPrime[65];   int mu[65];   vector<int> prime;   void linear_sieve() {     notPrime[0] = notPrime[1] = true;     for (int i = 2; i <= 60; i++) {       if (!notPrime[i]) {         prime.push_back(i);         mu[i] = -1;       }       for (int j = 0; j < (int)prime.size() && i * prime[j] <= 60; j++) {         int d = i * prime[j];         notPrime[d] = true;         mu[d] = -mu[i];         if (i % prime[j] == 0) {           mu[d] = 0;           break;         }       }     }   }   int main() {     int T;     long long n;     scanf( %d , &T);     for (int i = 1; i <= T; i++) {       scanf( %lld , &n);       qry[i] = Query(n, i);     }     sort(qry + 1, qry + 1 + T);     for (int i = 3; i <= 60; i++) {       long long v;       for (int j = 2; (v = qpow(j, i)) <= 1000000000000000000ll; j++)         dic[i].push_back(pair<long long, int>(v, j));     }     linear_sieve();     for (int i = 1; i <= T; i++) {       n = qry[i].n;       long long& res = ans[qry[i].id];       res = n - 1 + (get_sqrt(n) - 1) * mu[2];       for (int i = 3; i <= 60; i++) {         while (!dic[i].empty() && dic[i].back().first > n) dic[i].pop_back();         if (dic[i].empty()) break;         res += (dic[i].back().second - 1) * mu[i];       }     }     for (int i = 1; i <= T; i++) printf( %lld n , ans[i]);     return 0;   }   