快速幂(二分求幂)是快速求得a的b次方的方法。
正常求a的b次幂是要不断地进行b次累乘a。但是实际上,并不需要这么多次运算。假设要求,可以按照以下计算方式:
这样只需要5次计算就可以得到结果。这是由于任何一个数字都可以分成若干个相加
代码:
int cal(int a,int b)
{
int ans = 1;
while(b != 0)
{
if(b % 2 == 1)
ans *= a;
a *= a;
b /= 2;
}
return ans;
}
例如二进制数0001
代码中a是当前数最后一位的权重;b/2相当于对二进制数右移,这样,当最后一位是1时(b%2=1),就把ans乘上现在的a。
例题:求root(N,k)
在矩阵运算中,也可以使用快速幂,只不过刚开始ans的初始值为单位矩阵
例题:矩阵幂