【蓝桥杯】Python算法——快速幂
零、前言
距离25年蓝桥杯还有大概三个月时间,接下来重点应该会放在蓝桥杯备考方向,一起努力,一起加油
一、快速幂
如何快速求
a
b
=
p
a^b=p
ab=p?如果直接循环aaa…毫无疑问时间复杂度是很大的,那么怎么降低计算量呢?快速幂就是从幂运算的性质出发,提出的优化。
对于
a
b
a^b
ab,如果b是偶数,则可拆分为
a
b
=
a
b
/
/
2
∗
a
b
/
/
2
a^b = a^{b//2}*a^{b//2}
ab=ab//2∗ab//2
如果b是奇数,则有
a
b
=
a
b
/
/
2
∗
a
b
/
/
2
∗
a
a^b = a^{b//2}*a^{b//2}*a
ab=ab//2∗ab//2∗a
对于任意的a,b,我们都可以利用这个性质进行拆解,直到指数部分拆解为0或1.
二、代码
def ksm(a,b,mod):
if b==0:
return 1
if b==1:
return a % mod
res = ksm(a, b//2, mod)
res = res * res % mod
if b//2 == 1:
res = res * a % mod
return res
三、小结
该算法属于蓝桥杯考点中初等数论范围考点,比较基础,建议记住随时可调用。
原文地址:https://blog.csdn.net/2301_77168269/article/details/145148987
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!