使用 Python 三参数 pow 直接计算模意义下的快速幂。
OJ: luogu
题目 ID: P1226
难度:普及-
标签:数学快速幂python
创建: 2026-07-16 18:28
更新: 2026-10-07 10:45
后置题目
roj 1618「一本通 6.1 练习 3」越狱B 在得出 m^n − m(m−1)^(n−1) 后,直接照 A 教的 Python 三参数 pow 写 pow(m,n,MOD) 与 pow(m-1,n-1,MOD) 求两个模幂,属模板级复用;B 的额外台阶是正难则反取补集加逐位乘法原理的计数。luogu P3390【模板】矩阵快速幂B 明确把 A 教的快速幂循环原样移植,仅把乘法换成满足结合律的矩阵乘法,res 与 base 的二进制拆指数骨架完全相同luogu P3197[HNOI2008] 越狱B 用补集计数得到 m^n − m·(m−1)^(n−1) 后,两次幂运算直接调用 A 教的模快速幂(指数二进制拆分逐位平方取模),再叠加正难则反的计数转化
题意
计算
思路
快速幂把指数写成二进制,只使用
python
pow(a, b, modulus)三参数版本会在运算过程中持续取模,不会先构造可能极大的 a ** b。OJ 中应优先使用它,而不是写成 a ** b % modulus。
Python 知识
pow(base, exponent, modulus)是模快速幂,复杂度为。 - f-string 可以直接拼出题目要求的固定格式。
- Python 内置
pow由底层高效实现,模板题没有必要手写循环来代替它。
代码
python
a, b, modulus = map(int, input().split())
print(f"{a}^{b} mod {modulus}={pow(a, b, modulus)}")原有手写 C++ 快速幂仍可用于理解二进制拆分:
cpp
#include <bits/stdc++.h>
using namespace std;
long long a, b, p;
long long fast_power(long long base, long long exp, long long mod) {
long long ans = 1 % mod;
base %= mod;
while (exp > 0) {
if (exp & 1) {
ans = ans * base % mod;
}
base = base * base % mod;
exp >>= 1;
}
return ans;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> a >> b >> p;
cout << a << "^" << b << " mod " << p << "=" << fast_power(a, b, p) << '\n';
return 0;
}复杂度
时间
总结
这题最能体现 Python 相对 C++ 的语言特性:三参数 pow 就是可直接提交的标准模快速幂。