rsym 发表于 2022-7-7 17:33:22

为什么pow(8,-2,5)=4

第 2 个参数是负数,第 3 个参数不是将被忽略吗?不被忽略结果也不是4呀,这个4是怎么求的呢?

临时号 发表于 2022-7-7 17:52:48

本帖最后由 临时号 于 2022-7-7 17:53 编辑

我的直接报错了
ValueError: pow() 2nd argument cannot be negative when 3rd argument specified

159662-会稽 发表于 2022-7-7 17:55:16

这是什么语言

159662-会稽 发表于 2022-7-7 17:58:39

如果是Python的话:
内置的 pow() 方法:
pow(x, y[, z])
函数是计算 x 的 y 次方,如果 z 在存在,则再对结果进行取模,其结果等效于 pow(x,y) %z。

注意:pow() 通过内置的方法直接调用,内置方法会把参数作为整型,而 math 模块则会把参数转换为 float。
(注:以上解释来自www.runoob.com)

159662-会稽 发表于 2022-7-7 17:59:48

函数是计算 x 的 y 次方,如果 z 在存在,则再对结果进行取模,其结果等效于 pow(x,y) %z。

临时号 发表于 2022-7-7 18:00:55

本帖最后由 临时号 于 2022-7-7 18:02 编辑

我想,python语言应该是将你的第二个参数转化成了2,即pow(8,2,5)
你的python版本应该和我的不一样,你的版本应该比我的要高,应该是python3.8以上的版本,我的python3.7报错了

Passepartout 发表于 2022-7-7 18:57:51


这儿,指数为-1,mod为97,证明等式成立,将结论带入楼主的等式,pow(8,-2,5)的验证算为4 * 8 % 5 == 2;等式成立{:10_258:}。

dolly_yos2 发表于 2022-7-7 18:58:56

首先是回答:当 pow 被传递了三个参数,分别是底数 base ,指数 exp 和模值 mod ,并且第二个参数(指数)为负时,进行的计算较为特殊:计算结果为 base 在模 mod 意义下的一个乘法逆元的 -exp 次幂对 mod 取模。
根据这个计算方式,我们看到 8 在模 5 意义下的一个乘法逆元是 2 ,即 (8 * 2) % 5 == 1 ,则函数返回 pow(2, 2, 5)=4 。
其次是如何解决:首先应该查看帮助信息, python 的帮助信息比较容易获得,在交互式命令行输入(对此例) help(pow) 即可获取。当然从您的问题描述可以看到您应该已经查看了相关的信息,但是发现似乎行为和信息并不一致,故有此问题。在查看帮助信息的基础上进一步解决通过前往 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.
可见 help 给出的信息可能并不充裕,在之后遇到无法理解的内置方法或函数的行为时可以首先考虑进一步查阅文档。文档是非常重要且有意义的工具。

无理想的闲鱼 发表于 2023-1-6 23:37:18

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

自己琢磨了一小会,欢迎大佬们批评指正
页: [1]
查看完整版本: 为什么pow(8,-2,5)=4