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 最新版接入服务他来了 点击链接即可查看详细

GTP - 4 搭建教程

🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论,支持一下博主~

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值