Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- #include<cmath>
- using namespace std;
- const long long inf = 2e18 + 5;
- long long fastPow(long long x, int p)
- {
- long long answer = 1, current = x;
- while(p!=0)
- {
- if(p%2!=0)
- {
- if(answer>inf/current+1) return inf;
- answer *= current;
- }
- p/=2;
- if(current<=inf/current+1) current *= current;
- else current = inf;
- }
- return answer;
- }
- long long dp[70];
- void solveTestcase()
- {
- long long n;
- cin >> n;
- memset(dp, 0, sizeof(dp));
- dp[1] = n - 1;
- for(int p = 2;p<65;p++)
- {
- long long l = 1, r = dp[p-1] + 1, mid;
- while(l+1<r)
- {
- mid = (l+r)/2;
- if(fastPow(mid, p)<=n) l = mid;
- else r = mid - 1;
- }
- if(fastPow(r, p)<=n) dp[p] = r - 1;
- else dp[p] = l - 1;
- }
- for(int x = 65;x>=1;x--)
- {
- for(int k = 2*x;k<=65;k+=x)
- dp[x] -= dp[k];
- }
- cout << dp[1] << '\n';
- }
- int main()
- {
- ios::sync_with_stdio(false);
- cin.tie(nullptr);
- int T;
- cin >> T;
- while(T--) solveTestcase();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement