Python pow() 和模数

Python pow() and modulus

python3 中的 pow() 函数提供指数值。

>>>pow(2,3)
8

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

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

我无法理解值 4 是如何计算出来的,因为它在后台执行 手动计算时没有 return 值 4 作为提醒。

当 -ve 值以两个值传递时,它会以手动方法响应所需的输出。

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

用模计算负指数有什么区别?

来自documentation;

If mod is present and exp is negative, base must be relatively prime to mod. In that case, pow(inv_base, -exp, mod) is returned, where inv_base is an inverse to base modulo mod.

从 python 3.8 开始,pow 函数允许您计算 modular 逆。正如其他答案所提到的,当您使用整数、有一个负数 exp 并且 base 相对于 mod 时,就会发生这种情况。 (你的例子就是这种情况)

什么是 mod 逆元?

让我们从正态逆开始。一些数字 Y 有一个倒数 X 使得 Y * X == 1。模逆非常相似。对于一些数字 Y 和一些 modulus mod,存在逆 X 这样 ((X * Y) % mod) == 1。从您的示例中,您会看到 (4 * 4) % 5 实际上等于 1,使 4 成为 Y = 4mod = 5.[=27= 的有效 mod 逆元]

你怎么才能得到pow(4, -1, 5) == 0.25

好吧,您可以将其编写为单独的步骤 (4 ** -1) % 5,但正如文档所述

if mod is present, return base to the power exp, modulo mod (computed more efficiently than pow(base, exp) % mod)

因此您可能会牺牲性能来使用 (4 ** -1) % 5。不幸的是,似乎无法使用 pow.