为什么 sympy.perfect_power(-64) 返回 False?

问题描述 投票:0回答:1

sympy.perfect_power文档说:

返回

(b, e)
,使得
n == b**e
,如果
n
是与
e > 1
唯一的完美幂,否则
False
(例如 1 不是完美幂)。如果
n
不是有理数,则会引发 ValueError。

然而评估

sympy.perfect_power(-64)
结果是
False
。然而,
-64 == (-4)**3
,所以
sympy.perfect_power(-64)
应该返回
(-4, 3)
(也是因为没有其他整数底数的整数指数> 1)。

这是一个错误吗?或者我在这里遗漏了什么?

python sympy number-theory
1个回答
0
投票

在医生那里,您只需点击一下

[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
© www.soinside.com 2019 - 2024. All rights reserved.