概念
快速幂,顾名思义,很快速的进行幂运算。
时间复杂度O(log
n
n
n)。
运算
想要幂得快,就得算的少。
从时间复杂度上也可以看出来,快速幂每次都会使运算折半。
也就是:
举个例子,5^10。
5^10
1:5^5
2:5^4 * 5
3:5^2
4:5^1
5:5^0 * 5
实现
mod的存在是为了更好地处理题中碰到取模的情况。不需要的话可以取1e9+7或者直接去掉。
递归
int mod;
int quickPow(int a, int n) {
if (n==0) return 1;
if (n%2==0) {
int t = quickPow(a, n/2) % mod;
return t * t;
}
if (n%2!=0) {
return a * quickPow(a, n-1) % mod;
}
}
非递归
ull qp(ull a, ull m, ull mm) {
ull ans = 1;
while (m) {
if (m & 1)ans = ans * a % mm;
m >>= 1;
a = a * a % mm;
}
return ans;
}