快速幂代码如下:
int me(int a,int b)//传入a的b次方 { int ans=1; while(b!=0) { if(b&1==1) { ans*=a; } a*=a; b=b>>1; } return ans; }
以3的11次方为例。
则a=3,b=11
将11用二进制表示,11(2)=1011,可以将11拆解为20+21+23
3的11次方可以表示为3^(20+21+23)
3的三次方拆解为3^(20)·3^(21)·3^(23)
用位运算&1得出3末尾的二进制数,>>=1右移一位,逐个取得3的每一位二进制数进行计算。
a*a的意义:31→32→34→38→316→332→...