Java 快速幂

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;
		
	}
}


#运行结果
在这里插入图片描述

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值