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。

 

提示:

  1. n的取值范围是 [3, 10^18]。
  2. 输入总是有效且没有前导 0。
posted @ 2021-06-18 09:47  尖子  阅读(139)  评论(0编辑  收藏  举报