快速幂通过二进制拆分指数将时间复杂度从O(exp)降至O(log exp),核心是每次底数平方、按位累乘,需用long long防溢出并每步取模;标准迭代模板简洁高效,适用于非负整数指数与整数底数。
快速幂的核心逻辑是二进制拆分指数
直接用 pow(base, exp) 算大指数(比如 exp > 1e9)会超时或溢出,因为它是 O(exp) 的线性乘法。快速幂把指数看作二进制位,每次将底数平方、根据当前位是否为 1 决定是否累乘,时间降到 O(log exp)。
关键点在于:每轮迭代中,base 实际代表的是 base^(2^i),而 exp 的第 i 位为 1 时,就把这一项乘进结果。
- 必须用
long long存结果和中间乘积,避免 int 溢出 - 模运算(如取模
MOD)要每步都做,不能只在最后取 —— 否则乘法中间就溢出 - 指数为 0 时直接返回 1(注意:0^0 通常按题意定义,一般不在此模板处理)
带取模的递归写法容易栈溢出,推荐迭代实现
递归版虽然直观,但深度达 ~60 层(log₂(1e18) ≈ 60)虽不算深,但在嵌入式或栈受限环境可能出问题;更重要的是,迭代更易控制模运算时机、也方便扩展为矩阵快速幂。
标准迭代模板如下(以 MOD = 1e9+7 为例):
立即学习“C++免费学习笔记(深入)”;