利用幂数的二进制,为1时进行更新,为零时不进行更新,然后将幂除以2。思想有点类似于树状数组的lowbits,不过有点细微的区别。
lowbit每一次都要走到2,4,8... 而这个只是进行除2,判断奇偶性。
数学之其妙!!
代码:
int fastpow(int a,int n){
int b=a;
int res=1;
while(n){
if(n&1){
res*=b;
}
b*=b;
n>>=1;
}
return res;
}
利用幂数的二进制,为1时进行更新,为零时不进行更新,然后将幂除以2。思想有点类似于树状数组的lowbits,不过有点细微的区别。
lowbit每一次都要走到2,4,8... 而这个只是进行除2,判断奇偶性。
数学之其妙!!
代码:
int fastpow(int a,int n){
int b=a;
int res=1;
while(n){
if(n&1){
res*=b;
}
b*=b;
n>>=1;
}
return res;
}