TB椰程 TypeBuddy 打字搭子

快速幂

CSP-J · 编程模板 · 代码 · cpp · 难度 3/5 · 共 422 字

指数按二进制拆解,底数不断平方

  • 快速幂
  • 位运算

前置内容

正文

// ── 快速幂:a^b mod p ──
// 只要 O(log b)
// 把 b 看成二进制,
// 每一位对应底数一次自乘
long long fast_pow(long long a,
    long long b, long long p) {
    // 单位元:乘 1 不变
    long long ans = 1;
    // 先取模,防第一次乘法溢出
    a %= p;
    while (b > 0) {
        // b 当前位是 1 → 乘进答案
        if (b & 1) ans = ans * a % p;
        // 底数自乘:a → a^2 → a^4
        a = a * a % p;
        // 右移一位看下一二进制位
        b >>= 1;
    }
    return ans;
}
// 边乘边取模是防溢出的关键

CSP-J · 编程模板的其它内容

打字首页 · 词库画廊 · 编程打字 · 指法入门 · 天梯榜 · 数据分析 · 班级课堂 · 关于我们
椰程 TypeBuddy 打字搭子 —— 键盘指法练习 · 单词记忆 · 班级课堂 · 在线 PK