当指数为负时 pow(a, b, c) 做什么?

What does pow(a, b, c) do when the exponent is negative?

Python 允许内置函数 pow 中的第三个参数,它基本上计算对第三个参数取模的指数 (pow(a,b,c) = a**b % c)。

指数为负时如何工作?例如:

pow(6, -2, 13)
#-> 4

pow(6, -2, 12)
#-> Traceback (most recent call last):
#->  File "<stdin>", line 1, in <module>
#->  ValueError: base is not invertible for the given modulus

当第二个参数为-1时,计算a (mod c)的模逆。使用其他负幂 -n 将 return 模逆 n 次幂 (mod c).

https://en.wikipedia.org/wiki/Modular_multiplicative_inverse

来自 python 内置函数文档:

For int operands base and exp, if mod is present, mod must also be of integer type and mod must be nonzero. 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 计算 6 的倒数(因此 6 * inverse = 1)并计算 pow(inverse, 2, 13)。在这种情况下,6 mod 13 的倒数是 11 (6 * 11 = 66 = 1 mod 13),您计算 11 ** 2 = 121 = 4 mod 13.

您是否尝试过亲自检查一下? Python 过去在提供第三个参数时不支持负指数,它们在版本 3 中有所更改。8.x,现在它的作用是允许您计算 modular 逆(与处理实数时的 'standard' 相反。

因此,如果示例 pow(2, -1, 3) 会告诉您 mod 3 中的倒数,即 2,因为 2*2 =4 = 1 mod 3

pow(base, exp) =  base**exp
pow(12,2) = 144 = 12**2

现在支持 3.8 之后的模逆计算。在此之前,他们拒绝反转基本模

我认为没有人回答您的确切问题。 pow(6, -2, 13) 是 modulo 13 的负二次方的 6,也就是说,某些东西(来自 range(13))在乘以 6 的平方时得到 1。也就是4,因为4 * 6**2 == 144,也就是1modulo 13.

同样的东西 modulo 12 不存在,因为无论你乘以 36 都可以被 12 整除,所以你总是得到 0(永远不会是 1)mod 12 .