[
math
binary search
]
Leetcode 0483. Smallest Good Base
Problem statement
https://leetcode.com/problems/smallest-good-base/
Solution
We are actually asked to find the smallest a such that for some natural k: 1 + a + ... + a^k = n. It is equivalent to finding the maximum k, which is less than log_2(n). So, we start with k equal to integer part of log_2(n) and decrease it and try to solve equation of a: 1 + a + ... + a^k = n. We can solve this equation either using binary search or we can note, that a < n^{1/k} < a+1 for k >= 2, so the only candidate we have for a is [n^{1/k}] (and we need to handle case k = 1 separately).
Complexity
Time complexity is O(log n), space is O(1).
Code
class Solution(object):
def smallestGoodBase(self, n):
n = int(n)
max_k = int(log(n, 2))
for k in range(max_k,1,-1):
a = int(n**(1/k))
if (a**(k + 1) - 1)//(a - 1) == n:
return str(a)
return str(n - 1)