鱼C论坛

 找回密码
 立即注册
查看: 3517|回复: 17

[技术交流] pow() -- BIF

[复制链接]
发表于 2023-1-6 23:20:37 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 无理想的闲鱼 于 2023-1-7 17:03 编辑

pow() -- BIF

函数原型:
pow(base, exp[, mod])

参数解析:
参数 含义 是否可选
base底数 必选参数
exp (exponent)指数 必选参数
mod (modulo)取模运算 可选参数
注意:
1.双参数形式pow(base, exp)相当于使用幂运算符, 返回值是base**exp。
2.如果第三个参数mod存在,返回值是(base**exp)%mod。为什么引入第三个参数呢?因为使用第三个参数比pow(base, exp) % mod计算效率更高。
3.参数必须是数值类型,数值类型有三类,int整数,float浮点数,complex复数


难点解析:
一、取模运算 Modulo Operation
取模运算(Modulo Operation)和取余运算(Remainder Operation)两个概念有重叠的部分但是又不完全一致。主要的区别在于对负整数进行除法运算时操作不同。
对于整数a, b来说,取模和取余的方法都是:
1.求整数商 c = a / b (它们在第一步时候不同,取模是向负无穷方向取整,取余是向0方向取整。假如 a  = -9, b = 2, 那么取模c = -5, 取余c = -4)
2.计算模或者余数 r = a - (c * b)
-9 % 2
1
# python中的 % 是取模运算,这里的 c = -5, r = -9 -(-5 * 2) = 1
总的来说,当a和b正负号一致时,求模运算和求余运算所得的c的值一致,因此结果一致。当a和b正负号不一致,两者的结果也就不一定一致。

二、当第三个参数存在并且第二个参数是复数
pow(2, -2, 3)
1
pow(2, -2, 5)
4
pow(2, -2, 7)
2
当第三个参数存在,并且第二个参数是负数,base不能是mod的约数(比如pow(2, -4, 4)就是违法的)
在这个情况下,返回值是pow(inv_base, -exp, mod),第一个参数变成了inv_base,是base关于mod的模逆元素, 第二个参数变成了-exp

这里要引入模逆运算,当 a*b % n = 1, 我们称b为a关于n的模逆,
比如 3 * 5 % 7 = 1, 3关于7的模逆元素就是5
比如 3 * 3 % 8 = 1, 3关于8的模逆元素就是3
模逆元素有很多个,比如2关于3的模逆元素有2, 5, 8, ……, 3n-1
2 * 2 % 3 = 1
2 * 5 % 3 = 1
2 * 8 % 3 = 1
………………
是的,它们都是可以代入计算的,但是为了效率,我们一般取最小的模逆元素代入计算即可
pow(2, -2, 3) #先求出2关于3的(最小)模逆元素,是2, 其实返回值是pow(2, -(-2), 3)
1
pow(2, -2, 5) #先求出2关于5的(最小)模逆元素,是3, 返回值是pow(3, -(-2), 5)
4
pow(2, -2, 7) #先求出2关于7的(最小)模逆元素,是4, 返回值是pow(4, -(-2), 7)
2

题外话:
验证我的思路, 如果第三个参数存在并且第二个参数是负数,
while True:
    base = int(input("请输入base:"))
    exponent = int(input("请输入exp:"))
    modulo = int(input("请输入mod:"))
    b = 0 #b是base关于mod的模逆元素
    while True:
        if base * b % modulo == 1:
            break
        else:
            b += 1
    print(f"{base}关于{modulo}的最小模逆元素是{b}")
    ans = b ** (-exponent) % modulo
    standard = pow(base,exponent,modulo)
    if ans == standard:
        print("猜想正确")










评分

参与人数 3荣誉 +12 鱼币 +8 贡献 +9 收起 理由
sfqxx + 5 + 3 支持,
tommyyu + 5 + 5 + 3 鱼C有你更精彩^_^
小甲鱼 + 2 + 3 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-6 23:28:26 | 显示全部楼层
所以说模逆运算和第二个参数有啥关系吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-6 23:31:42 | 显示全部楼层
本帖最后由 无理想的闲鱼 于 2023-1-6 23:41 编辑
象棋爱好者 发表于 2023-1-6 23:28
所以说模逆运算和第二个参数有啥关系吗


pow函数里的模逆运算和第二个参数exp没有关系,只是base和mod之间的模逆运算,inv_base是base关于mod的模逆元素
python官方文档如下
In that case,pow(inv_base, -exp, mod) is returned, where inv_base is an inverse to base modulo mod.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-1-6 23:35:33 | 显示全部楼层
无理想的闲鱼 发表于 2023-1-6 23:31
pow函数里的模逆运算和第二个参数exp没有关系,只是base和mod之间的模逆运算,
python官方文档如下
In  ...

哇偶,我完全理解了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-7 03:12:30 | 显示全部楼层

回帖奖励 +3 鱼币

支持干货分享,调整一下文字排版可以申请加精华哈~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-7 08:15:50 | 显示全部楼层
okk明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-7 08:17:01 | 显示全部楼层
无理想的闲鱼 发表于 2023-1-6 23:31
pow函数里的模逆运算和第二个参数exp没有关系,只是base和mod之间的模逆运算,inv_base是base关于mod的模 ...

第二个参数也明白了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-7 08:21:58 | 显示全部楼层

回帖奖励 +3 鱼币

python官方文档全是机翻,都没法读
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-7 08:52:28 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-7 09:18:36 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-7 09:35:39 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-7 09:41:45 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-7 09:56:32 | 显示全部楼层
pow(b,-e m):
b*inv_base%m=1

pow(inv_base,e,m)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-7 09:58:30 | 显示全部楼层

回帖奖励 +3 鱼币

谢谢楼主撒币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-7 10:23:06 | 显示全部楼层
Wow!膜拜大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-7 10:24:16 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-1-7 10:34:18 | 显示全部楼层
本帖最后由 无理想的闲鱼 于 2023-1-7 10:45 编辑
小甲鱼 发表于 2023-1-7 03:12
支持干货分享,调整一下文字排版可以申请加精华哈~


好的、小甲鱼老师、我已经修改完毕、请您过目、
现在申请精华帖子

虽然还是有点冗长、但是这冗长&详细的讲解我感觉还是有必要的

有什么需要修改的地方,您再提出,不吝赐教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-24 17:40:05 | 显示全部楼层
鱼币没领到qwq
@小甲鱼 @不二如是 申请精华
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 03:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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