我希望计算floor(log(n,b))
,其中n
和b
都是整数。即使稍微大一点的n
和b
# 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
是否有更快或更优雅的方式来获得此解决方案?也许使用内置功能?
答案 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)