快速幂


例如求a^b,最原始的方法就是不断地乘a,复杂度为O(b)。
当b很大时就要用到快速幂的思想。
比如说a=2,b=100显然这是一个很大的数(=1267650600228229401496703205376)。
当然我们这里简化一下,求结果的后四位数(只要用10000取余数就行了)。
100的二进制为 1 1 0 0 1 0 0
就是64+32+4 (2^6 +2^5 +2^2)。
快速幂的思想就是判断1100100的每一位是否为1,如果是1,就乘对应的二进制次幂。复杂度为O(lgb)。

long long firstpow(long long base,long long pow)
{
	long long ans=1;
	while(pow)
	{
		if(pow&1)//if(pow%2==1)
		{
			ans=(ans*base)%10000;
		}
		pow>>=1;//pow=pow/2
		base=(base*base)%10000;
	}
	return ans;
}


然后看一下结果如下:

相关