【蓝桥杯】Python算法——快速幂

零、前言

距离25年蓝桥杯还有大概三个月时间,接下来重点应该会放在蓝桥杯备考方向,一起努力,一起加油

一、快速幂

如何快速求 a b = p a^b=p ab=p?如果直接循环aa a...毫无疑问时间复杂度是很大的,那么怎么降低计算量呢?快速幂就是从幂运算的性质出发,提出的优化。

对于 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.

二、代码

python 复制代码
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

三、小结

该算法属于蓝桥杯考点中初等数论范围考点,比较基础,建议记住随时可调用。

相关推荐
I_LPL5 小时前
hot100贪心专题
数据结构·算法·leetcode·贪心
颜酱5 小时前
DFS 岛屿系列题全解析
javascript·后端·算法
WolfGang0073216 小时前
代码随想录算法训练营 Day16 | 二叉树 part06
算法
2401_831824967 小时前
代码性能剖析工具
开发语言·c++·算法
Sunshine for you7 小时前
C++中的职责链模式实战
开发语言·c++·算法
qq_416018728 小时前
C++中的状态模式
开发语言·c++·算法
2401_884563248 小时前
模板代码生成工具
开发语言·c++·算法
2401_831920748 小时前
C++代码国际化支持
开发语言·c++·算法
m0_672703318 小时前
上机练习第51天
数据结构·c++·算法
ArturiaZ8 小时前
【day60】
算法·深度优先·图论