查看: 624|回复: 1

[C/C++] P1226 【模板】快速幂||取余运算

[复制链接]

1

技术

25

魅力

7

原创

管理员

Rank: 9Rank: 9Rank: 9

积分
11343
人气
297
分享
42

论坛元老优秀版主活跃会员最佳新人灌水之王

发表于 2022-1-16 19:04:31 | 显示全部楼层 |阅读模式
【代码】解析见注释:


[C++] 纯文本查看 复制代码
#include <iostream>
using namespace std;
typedef long long ll; // ll更好打
ll qpow(ll a, ll b, ll p) { // O(logn) 的快速幂算法,递归形式简单易懂// 该函数可计算 a ^ b % p
        if (b == 0) return 1;
        if (b == 1) return a; // 递归边界条件
        if (b % 2 == 0) { // 如果b是偶数,那么就可以拆分成(a^(b/2))^2
                // 如 2^8 可以拆分成 2^4*2^4
                ll result = qpow(a, b / 2, p); // 一定要用变量存返回值,否则达不到O(logn)
                return result * result % p;
        }
        return qpow(a, b - 1, p) * a % p; // b是奇数,可以拆分成a^(b-1)*a
        //如 2^9 可以拆分成 2^8*2
}
int main()
{
        ll a, b, p;
        cin >> a >> b >> p;
        cout << a << "^" << b << " mod " << p << "=" << qpow(a, b, p);
        return 0;
}




评分

参与人数 1经验 +10 原创 +1 收起 理由
小多呀 + 10 + 1 赞一个!

查看全部评分

Just do it.

0

技术

0

魅力

0

原创

初学乍练

Rank: 1

积分
32
人气
0
分享
0
发表于 2022-10-3 13:23:59 | 显示全部楼层
来观光一下qwq
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表