如何计算一个数是否是另一个数的幂?

新手上路,请多包涵

如何使 is_power_of 函数返回数字是否为给定底数的幂? base 假定为正数。

 def is_power_of(number, base):
  # Base case: when number is smaller than base.
  if number < base:
    # If number is equal to 1, it's a power (base**0).
    return __

  # Recursive case: keep dividing number by base.
  return is_power_of(__, ___)

print(is_power_of(8,2)) # Should be True
print(is_power_of(64,4)) # Should be True
print(is_power_of(70,10)) # Should be False

原文由 CIPHER 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 642
2 个回答
def is_power_of(number, base):
  # Base case: when number is smaller than base.
  if number < base:
    # If number is equal to 1, it's a power (base**0).
    return number == 1
  result = number//base
  # Recursive case: keep dividing number by base.
  return is_power_of(result, base)

原文由 Shishir 发布,翻译遵循 CC BY-SA 4.0 许可协议

不需要递归或蛮力。只是对数。

当你有 number = base ** x 时,你会得到 x = log(number) / log(base) 。简单地检查 x 是否是一个整数应该会给你答案。

 def is_power_of(number, base):
    return (math.log(number) / math.log(base)).is_integer()

如果你也想处理负数,你可以只计算 x 然后检查 base ** x 等于 number

 def is_power_of(number, base):
    x = math.log(abs(number)) / math.log(abs(base))
    return base ** x == number

原文由 Pranav Hosangadi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题