原理:
eg:base的11次幂,11的二进制-》1011,则可表示为2^0+2^1+2^3,也即就是base^(2^0)*base^(2^1)*base^(2^3);
O(log₂N)
以下提供几种代码 用以比较:
常规:O(n)
int pow1(int a,int b)
{
int r=1;
while(b--) r*=a;
return r;
}
快速幂(一般):
int pow2(int a,int b)
{
int r=1,base=a;
while(b!=0){
if(b%2) r*=base; //为0,即为偶数,则*base;为奇数则不执行此语句
base*=base; //代表base到达某位了
b/=2;
}
return r;
}
快速幂(递归):
int pow3(int m,int n)
{
if(n==1) return m;
int temp=pow3(m,n/2);
return (n%2==0 ? 1 : m)*temp*temp;
}
快速幂(位运算):
int pow4(int a,int b)
{
int r=1,base=a;
while(b){
if(b&1) r*=base; //判断奇偶
base*=base;
b>>=1; //
}
return r;
}