G. Good Number
这题剩余区间处理
#include<iostream>
using namespace std;
int n,k;
int ksm(int a,int b){
int res=1;
while(b){
if(b&1)res=res*a;
a=a*a;
b>>=1;
}
return res;
}
int solve(int p){
return 1+(ksm(p+1,k)-ksm(p,k))/p;
}
int main(){
int T;cin>>T;
for(int tt=1;tt<=T;tt++){int ans=0;
cin>>n>>k;
if(k>=32){
ans=n;
}else if(k==1){
ans=n;
}
else {
for(int i=1;;i++){
int l=ksm(i,k);int r=ksm(i+1,k)-1;
if(l<=n&&n<=r){
if(l==n){
ans++;
}else {
r=n;
ans+=1+(r-l)/i;
}
break;
}
ans+=1+(r-l)/i;
}
}
printf("Case #%d: %d\n",tt,ans);
}
}