简单的快速幂算法

1,首先介绍一下快速幂算法,简单来说就是给一个数a,求a的b次方,因为b的值特别大,比如说3^19999,这个时候就需要用快速幂来计算,基本上快速幂都会对应一个mod p运算,所以一个非常重要的性质就是 a*b %p=(a%p)*(b%p).

2,快速幂算法核心

int fun(int a, int b,int p)
{
	int ans = 1;
	while (a&&b)
	{
		if (b & 1) ans = ((ans*a) % p) % p;
		a = (a*a) % p;
		b >>= 1; //移位运算,右移一位
	}
	return ans;
}
3,算法理解:其实整个算法的实现是将b化成2进制来计算的,就比如说a是2,b是9,9的二进制为1001,2^9=2^8*2^1就是所有为1的位相乘。


猜你喜欢

转载自blog.csdn.net/qq_40129237/article/details/79883665