【模板】——快速幂、取模快速幂

计算2^35方法
第一种web

ll sum = 1;
for(int i = 1; i <= 35; i++)
{
	sum *= 2;
}
//计算了35次,不够快

快速幂的方法
把235 = 232+2+1
用到位运算 35 = 100011
咱们这样写代码svg

ll quickmi(int a, int b) //a的b次方 
{
	ll ans = 1;
	while(b)
	{
		if(b&1)//当末位为1时才运算 
		ans *= a;
		a *= a;
		b >>= 1;
	}
}
//计算了6次

下面看看运算过程,就很明白了
b = 100011;
ans = 1;
a = 2;ui

ans = 2;
a = 22;
b = 10001;spa

ans = 21+2;
a = 24;
b = 1000;code

ans = 21+2;
a = 28;
b = 100;xml

ans = 21+2;
a = 216;
b = 10;token

ans = 21+2;
a = 232;
b = 1;
最后一次while(b)
ans = 21+2+32;
a = 264;
b = 0;
取模快速幂it

int quickmod(int a, int b, int c)
{
	int ans = 1;
	a %= c;//防止后面爆int
	while(b) 
	{
		if(b&1)
		ans = (ans*a) % c;
		a = (a*a) % c;
		b >>= 1;
	}
	return ans;
}