483. 最小好进制
题目来源:483. 最小好进制
对于给定的整数 n, 如果n的k(k>=2)进制数的所有数位全为1,则称 k(k>=2)是 n 的一个好进制。
以字符串的形式给出 n, 以字符串的形式返回 n 的最小好进制。
/** * @param {string} n * @return {string} */ var smallestGoodBase = function(n) { let mMax = Math.floor( Math.log(parseInt(n))/Math.log(2) ); for(let m = mMax; m>1;m--){ const k = BigInt( Math.floor( Math.pow(parseInt(n), 1/m)) ); if(k>1){ let sum = BigInt(1); let next = BigInt(1); for(let i=1;i<=m;i++){ next = next*k; sum += next; } if(BigInt(n) === sum){ return k+''; } } } return ( BigInt(n) - BigInt(1)) + ''; };
示例 1:
输入:"13" 输出:"3" 解释:13 的 3 进制是 111。
示例 2:
输入:"4681" 输出:"8" 解释:4681 的 8 进制是 11111。
示例 3:
输入:"1000000000000000000" 输出:"999999999999999999" 解释:1000000000000000000 的 999999999999999999 进制是 11。
提示:
- n的取值范围是 [3, 10^18]。
- 输入总是有效且没有前导 0。