二分法的应用(快速幂)

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

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条件成立。

发布了19 篇原创文章 · 获赞 2 · 访问量 746

猜你喜欢

转载自blog.csdn.net/zan1763921822/article/details/104280674
今日推荐