You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现无需取整对数的3的幂数判断代码?

判断数字是否为3的整数次幂(无浮点精度问题方案)

浮点对数的精度问题确实没法靠调整保留小数位数彻底解决,因为不同数值的精度偏差不一样,很容易踩坑。给你几个完全避开浮点运算的实现方案,彻底解决精度问题:

方案一:循环整数除法

思路很直观:如果n是正整数,就不断用整数除法除以3,直到它不能被3整除,最后检查剩余的数是否为1(1是3^0)。

def isPowerOfThree(n):
    if n <= 0:
        return False
    while n % 3 == 0:
        n = n // 3
    return n == 1
  • 示例:输入243时,会被连续除以3五次,最终得到1,返回True;输入531440时,第一次取模3就不为0,直接返回False。
  • 优点:没有数值范围限制,逻辑简单易懂,完全避免精度问题。

方案二:利用最大3次幂取模

在常规整数范围内(比如231-1以内),最大的3的整数次幂是319 = 1162261467。如果n是3的正整数次幂,那么它一定是这个数的约数,取模结果为0;反之则不为0。

def isPowerOfThree(n):
    return n > 0 and 1162261467 % n == 0
  • 示例:243是1162261467的约数,返回True;531440不是,返回False。
  • 优点:时间复杂度O(1),效率极高;缺点:仅适用于n ≤ 3^19的场景,如果题目允许n为极大整数,这个方法不适用。

方案三:递归实现

逻辑和循环法一致,只是用递归替代循环:

def isPowerOfThree(n):
    if n <= 0:
        return False
    if n == 1:
        return True
    if n % 3 != 0:
        return False
    return isPowerOfThree(n // 3)
  • 注意:如果n极大,递归深度可能超出Python默认的递归栈限制,此时循环法更稳妥。

内容的提问来源于stack exchange,提问作者ng123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:48:10