sympy.perfect_power的文档说:
返回
,使得(b, e)
,如果n == b**e
是与n
唯一的完美幂,否则e > 1
(例如 1 不是完美幂)。如果False
不是有理数,则会引发 ValueError。n
然而评估
sympy.perfect_power(-64)
结果是 False
。然而,-64 == (-4)**3
,所以sympy.perfect_power(-64)
应该返回(-4, 3)
(也是因为没有其他整数底数的整数指数> 1)。
这是一个错误吗?或者我在这里遗漏了什么?
在医生那里,您只需点击一下
[source]
,就看不到原因:
if n < 0:
pp = perfect_power(-n)
if pp:
b, e = pp
if e % 2:
return -b, e
return False
首先计算
b, e = (2, 6)
,然后放弃,因为 6 不是奇数。
我确实认为这是一个错误,它应该尝试从指数中删除因子 2。也许是这样的:
if n < 0:
pp = perfect_power(-n)
if pp:
b, e = pp
e2 = e & -e
if e2 != e:
return -(b**e2), e//e2
return False