Zoolex 发表于 2021-9-1 00:04:29

pow函数求助

按照教程 pow(x,y,z)是X的Y次方对z求余数
如pow(2,2,3)=1
那么按道理pow(2,-2,3)=2**-2%3=0.25
然而实际上pow(2,-2,3)求出的结果是1??
求解达人原因
谢谢!

小伤口 发表于 2021-9-1 00:12:34

本帖最后由 小伤口 于 2021-9-1 12:42 编辑

可能你理解错了{:10_250:}
2的-2次方是4分之1对吧,再除以3等于12分之1
也就是1除以12,求余不是求小数,用小学的方法
1除以12不够除,就为0所以就余1了呀。{:10_250:}

逃兵 发表于 2021-9-1 08:14:23

>>> pow(2,-2,5)
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
    pow(2,-2,5)
ValueError: pow() 2nd argument cannot be negative when 3rd argument specified

wp231957 发表于 2021-9-1 09:07:46

这里有明显的提示及其原因

ValueError: pow() 2nd argument cannot be negative when 3rd argument specified

我英文不好,简单翻译一下   当pow第三个参数被指定时,第二个参数不能是负数

wp231957 发表于 2021-9-1 09:13:33

>>> pow(2,-3,3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: pow() 2nd argument cannot be negative when 3rd argument specified

Geeker_odd 发表于 2021-9-1 10:34:54

你们是哪个python版本,我的python3.9, pow()的第二个参数可以是负数,没有错误提示:
>>> pow(2,-2,5)
4

我估计python是这样处理:把第二个为负数的参数采用绝对值处理了。

小伤口 发表于 2021-9-1 12:29:26

????{:10_245:}

也子 发表于 2021-9-1 22:02:17

Python3.9可运行
猜想:
2 ** (-2) % 3 = (2 ** (-2)) / 3 = 0.25 / 3 求余数 -> 0……0.25
pow(2,-2,3) = (2 ** (-2)/ 3)= 0.25 / 3 = 1 / 12 求余数 -> 0……1
这样的话,我觉得
2 ** (-2) % 3 = pow(2,-2)% 3 才成立。
我也不是很懂啊{:10_245:},想了好久,还变成数学问题了{:10_269:},结果还是没想通{:10_266:},求指教{:10_254:}!

傻眼貓咪 发表于 2021-9-3 20:13:53

請先理解樓主所發問的問題吧,樓主說的確實沒有錯,只是 Python 官方已經說明 2.2.1 版本後 pow() 函數做修改了,詳情可以點擊官網:Incompatibilities between Python 2.1[.x] and 2.2[.x]
The 3-argument builtin pow() no longer allows a third non-None argument if either of the first two arguments is a float, or if both are of integer types and the second argument is negative (in which latter case the arguments are converted to float, so this is really the same restriction).

无理想的闲鱼 发表于 2023-1-6 23:59:05

pow函数解读
https://fishc.com.cn/thread-223019-1-1.html
(出处: 鱼C论坛)

chinajz 发表于 2023-1-7 09:48:41

挺绕的,第二个为负数先求逆模:
(底数、负指数、模数)-----》(逆模、指数、模数)
页: [1]
查看完整版本: pow函数求助