Python 3.9.6中pow(x,-1,z)与pow(x,-1)%z结果为何不一致?
为什么Python中
pow(x, y, z)与pow(x,y) % z结果不同(当y为负数时) 核心原因是这两种写法的运算逻辑完全不同,和数值大小无关:
三参数的
pow(x, y, z)当y为负数时,计算的是x在模z下的乘法逆元,也就是满足(x * a) % z == 1的整数a。
你的例子里,100和321互质(321=3×107,100与这两个质数都无公因数),所以逆元存在:100 * 61 = 6100,6100 % 321 = 1,符合逆元定义,所以返回61。而
pow(x, -1)或x ** -1是计算x的实数倒数,得到浮点数0.01,再对321取模时,遵循浮点数取模规则:找到余数r使得0.01 = k*321 + r(其中k是整数,且0 ≤ r < 321),这里k取0,所以r=0.01,结果自然是0.01。
简单来说,三参数pow的负指数是数论领域的模运算,两参数pow/**的负指数是普通实数运算,二者没有等价关系,这才是结果不同的根本原因。
内容的提问来源于stack exchange,提问作者L-ING
相关产品推荐
相关产品推荐

