对于给定的整数 n, 如果n的k(k>=2)进制数的所有数位全为1,则称 k(k>=2)是 n 的一个好进制。
以字符串的形式给出 n, 以字符串的形式返回 n 的最小好进制。
示例 1:
输入:"13"
输出:"3"
解释:13 的 3 进制是 111。
示例 2:
输入:"4681"
输出:"8"
解释:4681 的 8 进制是 11111。
示例 3:
输入:"1000000000000000000"
输出:"999999999999999999"
解释:1000000000000000000 的 999999999999999999 进制是 11。
提示:
n的取值范围是 [3, 10^18]。
输入总是有效且没有前导 0。
思路:递上一份比较好的题解
class Solution {
public String smallestGoodBase(String n) {
long x=Long.valueOf(n);
//System.out.print(x);
for(long m=(long)Math.log((double)x)+5;m>=1;m--) {
long l=2,r=(long)Math.pow((double)x, (double)1/(double)m)+1,sum;
//System.out.println(m+" "+1.0/m);
while(l<=r) {
long mid=l+(r-l)/2;
sum=1;
for(int j=0;j<m;j++)
sum=sum*mid+1;
if(sum==x)
return String.valueOf(mid);
else if(sum<x)
l=mid+1;
else r=mid-1;
}
}
return String.valueOf(x-1);
}
}