C++ 快速幂详细教学
🔥博客介绍`: EvLast
🎥系列专栏: <<数据结构与算法>> << 算法入门>> << C++项目>>
🎥 当前专栏: << 算法入门 >>
专题 : 数据结构帮助小白快速入门算法
👍👍👍👍👍👍👍👍👍👍👍👍
☆*: .。. o(≧▽≦)o .。.:*☆
❤️感谢大家点赞👍收藏⭐评论✍️
快速取模
代码实现:
typedef long long ll; // 定义 long long 类型
ll qpow_mod(ll a, ll b, ll mod) { // 注意参数中加入了模数 mod
ll res = 1;
while (b) {
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
代码解释:
这段代码实现了一个快速幂取模函数qpow_mod(ll a, int b)
,用于计算底数a
的指数为b
的幂对给定的模数mod
取模的结果。
函数首先声明一个ll
(long long)类型的变量res
,用于存储最终的结果,并初始化为1。接下来进入一个循环,循环的条件是指数b
不为0。
在循环中:
-
首先判断当前的指数
b
是否为奇数,通过使用位运算b&1
来判断。如果是奇数,则将res
乘以底数a
并对模数mod
取模,即res = res * a % mod
。该步骤相当于将当前奇数指数的贡献乘到结果上。 -
然后,将底数
a
自乘一次并对模数mod
取模,即a = a * a % mod
。这一步相当于将底数自乘以2。 -
最后,对指数
b
进行右移一位(等价于除以2),即b >>= 1
,使得下一次循环处理次高位的指数。
循环结束后,返回最终的结果res
。
整个过程利用了二进制表示中的幂次性质,通过不断将指数右移,将复杂度从线性降低到了对数级别。这样可以在较短的时间内计算出较大指数的幂。同时,在每次迭代中对结果取模,防止溢出和减小运算量。
需要注意的是,函数中使用到了全局定义的变量mod
,在调用该函数之前需要保证这个变量的声明和定义。另外,函数返回的结果是res
,返回类型是ll
(long long)。
重磅消息:
GTP - 4 最新版接入服务他来了 点击链接即可查看详细
🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论,支持一下博主~
本文作者:2c237c6
本文链接:https://www.cnblogs.com/27dCnc/p/18568610
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步