更好地计算整数n和b的log(n,b)的底数?

时间:2018-02-10 21:41:51

标签: python

我希望计算floor(log(n,b)),其中nb都是整数。即使稍微大一点的nb

,直接实现此功能也会失败
# direct implementation
def floor_log(n,b):
    return math.floor(math.log(n,b))

例如,floor_log(100**3, 100)评估为2而不是正确的值3

我能够提出一个反复划分的工作函数,直到没有任何东西

# loop based implementation
def floor_log(n,b):
    val = 0
    n = n // b
    while n > 0:
        val += 1
        n = n // b
    return val

是否有更快或更优雅的方式来获得此解决方案?也许使用内置功能?

1 个答案:

答案 0 :(得分:4)

一种方法是让你的功能自我纠正:

def floor_log(n,b):
    res = math.floor(math.log(n,b))
    return res + 1 if b**(res+1) == n else res 

或者更加模糊:

def floor_log(n,b):
    res = math.floor(math.log(n,b))
    return res + (b**(res+1) == n)