检查一个数字是否为另一个数字的幂,即判断是否存在整数 ( k ) 使得 ( a = b^k )。例如,判断 8 是否是 2 的幂,因为 ( 8 = 2^3 ),所以 8 是 2 的幂。
原因:直接法通过循环或递归逐次计算幂,时间复杂度为 ( O(k) ),其中 ( k ) 是可能的幂次,效率较低。
解决方法:使用数学法,通过对数和指数的性质进行判断,时间复杂度为 ( O(1) )。
import math
def is_power_of(base, num):
if num <= 0 or base <= 0:
return False
if base == 1:
return num == 1
power = math.log(num, base)
return abs(power - round(power)) < 1e-10
# 示例
print(is_power_of(2, 8)) # True
print(is_power_of(2, 9)) # False
通过上述方法,可以高效地判断一个数字是否为另一个数字的幂,并且避免了直接法中效率低的问题。
领取专属 10元无门槛券
手把手带您无忧上云