快速幂算法

快速幂用于快速求解a的b次方问题。 时间复杂度为(logn)
例如:求解4的5次方
5的二进制数为101
4 5 4^5 45= 4 ( 2 2 + 2 0 ) 4^{(2^2+2^0)} 4(22+20)= 4 2 2 ∗ 4 2 0 4^{2^2}*4^{2^0} 422420= 4 2 1 + 2 1 ∗ 4 2 0 4^{2^1+2^1}*4^{2^0} 421+21420= 4 2 0 + 2 0 + 2 0 + 2 0 ∗ 4 2 0 4^{2^0+2^0+2^0+2^0}*4^{2^0} 420+20+20+20420
上式中,因为b的二进制为101,最低位的1,即为乘一次b,最高的1,即为乘 2 2 2^2 22次b(b的平方后的平方),遇到0时不乘。

  • ①令结果res=1,以ans= 4 2 0 4^{2^0} 420=a
  • ②将b用二进制表示,与1做&运算,判断最低位是否为1
  • ③如果b的最低位为1,则用结果res乘上ans
  • ④每次循环后,ans都要变成平方(因为二进制高一位就是原来的平方)
  • ⑤b二进制右移一次,重复②~④
import java.util.Scanner;
public class quickPow {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int a=scanner.nextInt();
		int b=scanner.nextInt();
		long res=quickpow(a, b);
		System.out.println(res);

	}
	public static long quickpow(int a,int b) {
		long ans=a;
		long res=1;
		while(b!=0) {
			if((b&1)!=0) {
				res*=ans;
			}
			ans*=ans;
			b>>=1;
		}
		return res;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值