fzu 2125

#include<stdio.h>
#include<math.h>
int total(int x,int m) {
int sum=0;
while(x>0) {
 sum+=x%m;
 x/=m;
}
return sum;
}
int main() {
  __int64 n,suma,i;
  int m,t,ans,j,h;
scanf("%d",&t);
while(t--) {
scanf("%I64d%d",&n,&m);
ans=-1;
j=(int)sqrt(n*1.0);
for(i=0;i<=100&&i<j;i++) {//因为x的值最大为sqrt(n),最小为n/x-sqrt(n,m)
         h=j-i;
suma=total(h,m);
if(h*(suma+h)==n) {
ans=h;
break;
}
}
printf("%d ",ans);
}
return 0;
}
原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410841.html