快速幂
快速幂可以让我们降低结果特别大的幂的运算时间(当幂的结果比较小时用快速幂可能反而会增加运算时间),因为快速幂降低了算法的时间复杂度,将其由幂的形式转换成了乘积的形式。除此之外快速幂还可用来求余,因为在计算过程中,可能由于数据过大导致爆掉,这时候就可以用快速幂来求余。
代码如下:
int ksm(int a,int b)//求a的b次方
{
int ans=1,base=a;
while(b!=0)
{
if(b%2==1)
ans*=base;
base*=base;
b/=2;
}
return ans;
}
求余版的代码如下:
int ksm(int a,int b,int mod)//求a的b次方对mod取模
{
int ans=1,base=a;
while(b!=0)
{
if(b%2==1)
{
ans*=base;
ans%=mod;
}
base*=base;
base%=mod;
b/=2;
}
return ans;
}
取模的原理如下:
(a+b)%mod=(a%mod+b%mod)%mod
(ab)%mod=(a%modb%mod)%mod