WA#16 #18 #19 #20
分类讨论k=1,k=2,k≥3
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,k,ans,c;
map<ll,bool> m;
int main(){
cin>>n>>k;
if(k==1){
cout<<n;
return 0;
}
m[1]=1;
ans=1;
if(k==2){
for(ll i=2;i<=n;i++){
if(i*i*i>n) break;
ll p=3;
while(pow(i,p)<=n){
ll temp=pow(i,p);
if(!m[temp]){
m[temp]=1;
ans++;
if((ll)sqrtl(temp)*(ll)sqrtl(temp)==temp)
c++;
}
p++;
}
}
cout<<ans+(ll)sqrtl(n)-1-c;
return 0;
}
for(ll i=2;i<=n;i++){
if(pow(i,k)>n) break;
ll p=k;
while(pow(i,p)<=n){
ll temp=pow(i,p);
if(!m[temp]){
ans++;
m[temp]=1;
}
p++;
}
}
cout<<ans;
return 0;
}