这是我的例子:
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
太小了,但就我而言,它根本没有那么小。
谁能解释一下吗?
我将不胜感激。
仅当
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()
确实被设计为一种访问整数高级算法的便捷方法。