鱼C论坛

 找回密码
 立即注册
查看: 4013|回复: 8

[已解决]为什么pow(8,-2,5)=4

[复制链接]
发表于 2022-7-7 17:33:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
第 2 个参数是负数,第 3 个参数不是将被忽略吗?不被忽略结果也不是4呀,这个4是怎么求的呢?
最佳答案
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 给出的信息可能并不充裕,在之后遇到无法理解的内置方法或函数的行为时可以首先考虑进一步查阅文档。文档是非常重要且有意义的工具。
屏幕截图 2022-07-07 172858.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-7 17:52:48 | 显示全部楼层
本帖最后由 临时号 于 2022-7-7 17:53 编辑

我的直接报错了
ValueError: pow() 2nd argument cannot be negative when 3rd argument specified
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-7 17:55:16 | 显示全部楼层
这是什么语言
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-7 17:59:48 | 显示全部楼层
函数是计算 x 的 y 次方,如果 z 在存在,则再对结果进行取模,其结果等效于 pow(x,y) %z。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-7 18:00:55 | 显示全部楼层
本帖最后由 临时号 于 2022-7-7 18:02 编辑

我想,python语言应该是将你的第二个参数转化成了2,即pow(8,2,5)
你的python版本应该和我的不一样,你的版本应该比我的要高,应该是python3.8以上的版本,我的python3.7报错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-7 18:57:51 | 显示全部楼层
捕获.PNG
这儿,指数为-1,mod为97,证明等式成立,将结论带入楼主的等式,pow(8,-2,5)的验证算为4 * 8 % 5 == 2;等式成立
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 给出的信息可能并不充裕,在之后遇到无法理解的内置方法或函数的行为时可以首先考虑进一步查阅文档。文档是非常重要且有意义的工具。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-1-6 23:37:18 | 显示全部楼层
pow函数解读
https://fishc.com.cn/thread-223019-1-1.html
(出处: 鱼C论坛)

自己琢磨了一小会,欢迎大佬们批评指正
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 16:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表