题目链接
我的代码
#include<bits/stdc++.h>
using namespace std;
long long n;
unordered_set <long long> s;
long long pow1(long long a,long long b){
if (b==1) return a;
long long ans=pow1(a,b/2);
return ans*ans*((b%2)?a:1);
}
int main(){
cin>>n;
long long a1=log(n)/log(2),a2,a3,a4;
for (long long i=3;i<=a1;i++){
a2=pow(n,1.0/i);
for (long long j=2;j<=a2;j++){
a3=pow1(j,i);
a4=sqrtl(a3);
if (a4*a4!=a3 && a3<=n) s.insert(a3);
}
}
cout<<s.size()+(long long)(sqrtl(n));
return 0;
}