快速幂
快速运算一个底数a的n次幂,时间复杂度为O(log₂n),与最基本的O(n)复杂度的算法相比较 效率至少翻一番
快速幂原理
快速幂的运算需要用到位运算
1、或运算
1 l 1 | 0 l 1 | 0 l 0 |
---|---|---|
1 | 1 | 0 |
2、与运算
1 & 1 | 0 & 1 | 0 & 0 |
---|---|---|
1 | 0 | 0 |
3、左移或右移
4 = 0100
左移:4<<1 = 1000 = 8
右移:4>>1 = 0010 = 2
举例:
C语言代码
long long FastM(long long a,long long b)
{
long long num=a,sum=1;
while(b!=0)
{
if(b&1!=0)
{
sum*=num;
}
num*=num;
b>>=1;
}
return sum;
}