为什么在 Python 3.9.6 中 y 为 -1 时 pow(x, y, z) 不等于 pow(x, y) % z?

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

这是我的例子:

pow(100, -1 , 321) # output 61
pow(100, -1) % 321 # output 0.01
100 ** -1 % 321 # output 0.01

我知道

pow(x, y, z)
应该等于
pow(x, y) % z
x ** y % z
,但就我而言,它不是。

这个answer说是因为

x ** y
太小了,但就我而言,它根本没有那么小。

谁能解释一下吗?

我将不胜感激。

python math pow
1个回答
0
投票

仅当

all
参数均为整数类型时,才支持 pow() 的第三个参数。在这种情况下,
pow(i, j, k)
计算以 k 为模的乘法群中 i 的 j 次方的数论值。除非你需要它,否则你不需要它,然后你真的需要它;-)

在这种情况下,-1 的幂意味着计算 i 模 k 的乘法逆元,或者换句话说,计算 range(k) 中的整数 m,使得 i*m 与 1 模 k 同余。在你给出的例子中,

>>> 61 * 100
6100
>>> _ % 321
1

so 61 是 100 模 321 的乘法逆元。如果存在乘法逆元,则它是唯一的(模 k)。如果不存在,

pow()
会引发异常:

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

不关心这些吗?没关系。有一天你可能会。与此同时,坚持使用

**
运算符来提高浮点数的幂。 3 参数
pow()
确实被设计为一种访问整数高级算法的便捷方法。

© www.soinside.com 2019 - 2024. All rights reserved.