rt
这份代码民间数据95pts,官方数据AC(虽然没看出来哪里错了)
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
const ll N=2e5+10;
ll n,k,cnt,ans;
map<ll,ll> m;
ll sqt(ll x){
ll v=sqrt(x);
for(int i=max(v-5,1ll);i<=v+5;i++){
if(i*i>x) return i-1;
}
}
signed main(){
scanf("%lld %lld",&n,&k);
if(k==1){
printf("%lld\n",n);
return 0;
}
for(int i=1;i<=sqrtl(n);i++){
ll sum=i*i;
if(1.0*n/sum<i) break;
for(int j=3;j<=100;j++){
if(1.0*n/sum>=i) sum=sum*i;
else break;
if(j<k) continue;
if(m[sum]==0){
ll s=sqrtl(sum);
if(s*s==sum) cnt++;
m[sum]=1;
ans++;
}
}
}
if(k==2) ans+=sqrtl(n)-cnt;
printf("%lld\n",ans);
return 0;
}