Python pow() 和 modulus

4

在Python3中,pow()函数提供指数的值。

>>>pow(2,3)
8

Python3 支持负指数,例如 可以用 pow(10,-1) 表示。当我计算 pow(4,-1,5) 时,它输出了 4。

>>> pow(4, -1, 5)
4

我不太理解4这个值是怎么计算出来的,因为在后台它执行了,而当我手动计算时它没有返回一个余数为4的值。

当传入两个负数时,它会像手动计算一样返回期望的输出。

>>> pow(4, -1)
.25

在使用模数计算负指数时有何区别?

2个回答

7

来自文档:

如果存在 mod 并且 exp 是负数,则 base 必须相对于 mod 是互质的。在这种情况下,返回 pow(inv_base, -exp, mod),其中 inv_base 是模 modbase 的逆元。


0
从Python 3.8开始,pow函数允许你计算模反元素。正如其他答案所提到的,当你使用整数、指数为负数且底数与模互质时(在你的例子中就是这种情况),就会出现模反元素。

什么是模反元素?

我们先从普通的倒数开始说起。某个数Y有一个倒数X,使得Y * X == 1。模反元素非常类似。对于某个数Y和某个模数mod,存在一个倒数X,使得((X * Y) % mod) == 1。从你的例子中可以看出,(4 * 4) % 5确实等于1,这使得4成为Y = 4mod = 5的有效模反元素。

如何直接得到pow(4, -1, 5) == 0.25

嗯,你可以将它写成分步骤的形式(4 ** -1) % 5,但正如文档所说:

如果存在 mod,则返回 base 的 exp 次幂,模 mod(比 pow(base, exp) % mod 更高效地计算)。
因此,您可以通过使用 (4 ** -1) % 5 来牺牲性能。不幸的是,似乎无法使用 pow 来实现这一点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接