胡凡算法之——快速幂

关于快速幂的两种方法:

1.递归算法:只要掌握一个精髓:

递归相对来说比较好理解:代码如下:

typedef long long LL;
//求a^b % m ,递归写法;

LL binaryPow(LL a,LL b,LL m){
	if(b == 0) return 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;
	}
} 

2.迭代算法:

较难理解,但其实就是把次方数当成二进制,如果是1,就将当时的底数存起来,每次底数平方即可;

代码如下:

//求 a^b % m ,迭代写法;
LL binaryPow(LL a,LL b,LL m){
	LL ans=1;   
	while{b>0}{
		if(b & 1) ans=ans*a % m;
		a=a*a%m;
		b>>=1;
	}
	return ans;
}

这两种的复杂度都差不多,你觉得哪种好用就用哪个喽~

猜你喜欢

转载自blog.csdn.net/dyyay521/article/details/88647799