【C语言算法小工具系列】快速幂函数

目录

概要

工具类型

其他


概要

在一些C语言的算法比赛或者C语言算法考试当中,往往不能直接使用现成的算法库,需要自己去写一些操作,这些操作统一记录在C语言算法小工具系列当中。

工具类型

快速幂函数

用于计算ab次方。它使用了分治的思想,将指数b不断除以2,然后递归计算,最后将结果相乘。

技术细节

代码实现

// 求a^b
long long qpow(int a, int b) {
    long long ans = 1;
    if (b == 0)
        return 1;
    // 如果指数是偶数就不走这个if,如果指数是奇数(1),则最后在乘上一个a
    if (b % 2)
        ans = a;
    long long t = qpow(a, b / 2);
    return t * t * ans;
}

其他

带模取的快速幂函数

// 求a^b (mod mod)
long long qpow(int a, int b, long long mod) {
    long long ans = 1;
    if (b == 0)
        return 1;
    // 如果指数是偶数就不走这个if,如果指数是奇数(1),则最后在乘上一个a
    if (b % 2)
        ans = a;
    long long t = qpow(a, b / 2);
    // % 运算符的优先级低于*、/、+、-。
    /*
    计算 t * t,得到 t 的平方。
    将步骤1的结果对 mod 取模,即计算 (t * t) % mod。
    将步骤2的结果与 ans 相乘。
    将步骤3的结果对 mod 取模,即计算 ((t * t) % mod * ans) % mod。
    */
    return t * t % mod * ans % mod;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

活成自己的样子啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值