快速幂算法实现

234 字
1 分钟
快速幂算法实现

P1226 【模板】快速幂为基准#

前言<快速幂的时间复杂度是>O(logn)O(log n),暴力乘积取幂的复杂度则为O(n)O(n),是一个使用的小技巧,大部分情况下,无需理解原理,背板子即可

原理#

对于一个nmn ^ m的式子,我们可以把mm拆成mm的二进制各位相乘,这样根据神秘初二的一个什么什么率(反正我忘了叫啥名了),其计算结果仍不变,但是工作量却少了很多

此处引用下OI-Wiki的例子

假设要计算 3133^{13} .如果将它展开为连乘式,需要 131=1213-1=12 次乘法.但是,因为 313=3(1101)2=38×34×313^{13}=3^{(1101)2}=3^8×3^4×3^1 ,所以我们仅需计算38×34×313^8×3^4×3^1即可

代码实现:#

int fastpower(int x, int y,int mod=LLONG_MAX) {
int ans = 1, base = x;
while (y) {
if (y & 1) ans *= base, ans %= mod;
base *= base, base %= mod;
y >>= 1;
}
return ans%mod;
}
cin >> a >> b >> p;
printf("%ld^%ld mod %ld=%ld", a, b, p, fastpower(a, b, p));

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
快速幂算法实现
https://azx.xn--0iv.gay/posts/algo-fastpower/
作者
WanFoxAZX
发布于
2026-08-25
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
WanFoxAZX
Hello, I'm AZX.
公告
Welcome!
分类
标签
最新动态

还没有发布动态

更多动态
站点统计
文章
10
动态
0
分类
6
标签
5
总字数
2,549
运行时长
0
最后活动
0 天前
站点信息
构建平台
Netlify CI
博客版本
Firefly v6.15.5
文章许可
CC BY-NC-SA 4.0