通过分析可以发现,x的值最大不会超过sqrt(n),最小也就是 n/x-s(n,m) ,同时 可以发现 s(x,m)的最大值为 81左右,不会太大,因此 x 的范围 在 sqrt(n)附近。。
#include <stdio.h>
#include <math.h>
#include <string.h>
int get_bitsum(int n, int m) {
int sum = 0;
while (n) {
sum += n % m;
n /= m;
}
return sum;
}
int main() {
int t;
int m, n;
long long N;
scanf("%d", &t);
while (t--) {
scanf("%lld%d", &N, &m);
int ans = -1;
n = sqrt(N + 0.0);
while (n) {
if (N % n == 0) {
int bitsum = get_bitsum(n, m);
if (N / n - n == bitsum) {
ans = n;
}
}
if (N / n - n > 90)
break;
n--;
}
printf("%d\n", ans);
}
}