快速幂原理
简单的数学交换律
当幂数为偶数时:
当幂数为奇数时:
同理:
看递归模式,快速幂
public static long power2(long a,int n){
if(n==0){
return 1;
}
long r = power2(a,n/2);
if((n&1)==1){
return r*r*a;
}else{
return r*r;
}
}
非常好理解。
看非递归模式快速幂
注意点:
A & 1 等价于 A % 2 用&的方式更加酷炫而已
A >>1 等价于 A / 2 用位运算符,同理,酷炫
public static long power(long a,int n){
long weght = 1;
while(n!=0){
// n&1 等价于 n%2
if((n&1)==1)weght *= a;
a *= a;
// n >>= 1 等价于 n = n/2;
n >>=1;
}
return weght;
}