Java 快速幂
#前篇:第一次写博客,有问题请多多指教,本人博客将分享一些自己在学习中学习到的知识,当成一种记录,希望能对你有一丝帮助
public class quickmi {
/*新人写记录,有错误请多多指教,不喜勿喷,一起探讨,一起学习
* 快速幂
* 快速幂可以将普通 a^b的累乘时间复杂度由O(n)变为O(logn)
* 例如a的14次幂
* a^14=a^(2^8+2^4+2^1+2^0)=a^(1110)
* 即将a的b次幂中的b转换为二进制进行运算
* 如何将b转换为2进制然后一位一位进行运算?
* 二进制中我们可以是用 >> 符号将二进制进行右移,十进制使用 >> 会转换成二进制
* 这样我们就可以对每一位进行运算了,操作很简单,即让b和1进行位运算,如b&1==1,则表示b的最后一位为1,然后将b右移,继续位运算,直到b为0
*
* */
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print(pow(2,6));
}
static int pow(int a,int b) {
int ans=1;
int base=a;
while(b!=0) {
if((b&1)!=0) {//最后一位进行位运算,如果b的二进制最后为1,则结果为1
ans=ans*base;
}
base=base*base;//每一次得到a^2^n
b=b>>1;
}
return ans;
}
}
#运行结果