pow() -- BIF
本帖最后由 无理想的闲鱼 于 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("猜想正确")
所以说模逆运算和第二个参数有啥关系吗 本帖最后由 无理想的闲鱼 于 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. 无理想的闲鱼 发表于 2023-1-6 23:31
pow函数里的模逆运算和第二个参数exp没有关系,只是base和mod之间的模逆运算,
python官方文档如下
In...
哇偶,我完全理解了,谢谢 {:10_307:} 支持干货分享,调整一下文字排版可以申请加精华哈~ okk明白了 无理想的闲鱼 发表于 2023-1-6 23:31
pow函数里的模逆运算和第二个参数exp没有关系,只是base和mod之间的模逆运算,inv_base是base关于mod的模 ...
第二个参数也明白了,谢谢 python官方文档全是机翻,都没法读 {:10_333:} {:10_257:}{:10_257:}{:10_257:} {:10_275:}{:10_275:}{:10_275:} 看看 pow(b,-e m):
b*inv_base%m=1
pow(inv_base,e,m)
谢谢楼主撒币 Wow!膜拜大佬{:10_303:} {:10_275:} 本帖最后由 无理想的闲鱼 于 2023-1-7 10:45 编辑
小甲鱼 发表于 2023-1-7 03:12
支持干货分享,调整一下文字排版可以申请加精华哈~
好的、小甲鱼老师、我已经修改完毕、请您过目、
现在申请精华帖子{:10_332:}
虽然还是有点冗长、但是这冗长&详细的讲解我感觉还是有必要的{:10_319:}
有什么需要修改的地方,您再提出,不吝赐教{:10_329:} 鱼币没领到qwq
@小甲鱼 @不二如是 申请精华
页:
[1]