二分法的应用(快速幂)

在这里插入图片描述
对于这个问题使用普通的遍历就有点不合适了,复杂度太高。
这里可以使用基于二分思想的快速幂法,也称二分幂。如下:在这里插入图片描述

typedef long long LL;
//递归的写法
LL BINARYPOW(LL a,LL b,LL m){
	if(b==0) return 1;
	//b为奇数,转换为b-1
	if(b%2==1) return a*binaryPow(a,b-1,m)%m;
	else{
		LL mul=binaryPow(a,b/2,m);
		return mul*mul%m;
	}
}

条件if(b%2==1)可以用if(b&1)代替,因为b&1进行位于操作,判断b的末位是否为1,因此当b为奇数时b&1返回1,if条件成立。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值