快速幂
假设我们要计算 313
若直接循环 13 次进行累乘,时间复杂度为 O(n),在进行次数较高的处理时容易 TLE
这里引入倍增思想进行快速幂运算
实现
13 的二进制表示为 1101,即 8+4+2,我们很容易从里面看出倍增的要素
将 313分解为 38 · 34 · 31进行计算,而后计算的数又可以依据前面计算过的数进行计算
n 有 logn+1 个二进制位,我们只需要计算 logn+1 次乘法即可
1 | int quickpow(int a, int n) { |
假设我们要计算 313
若直接循环 13 次进行累乘,时间复杂度为 O(n),在进行次数较高的处理时容易 TLE
这里引入倍增思想进行快速幂运算
13 的二进制表示为 1101,即 8+4+2,我们很容易从里面看出倍增的要素
将 313分解为 38 · 34 · 31进行计算,而后计算的数又可以依据前面计算过的数进行计算
n 有 logn+1 个二进制位,我们只需要计算 logn+1 次乘法即可
1 | int quickpow(int a, int n) { |