本文写于2017-10-31,其中的一些思路可能存在问题。本文移至此处时暂未重新学习。
快速乘是防止爆long long的,一般用的情况是模数也是long long 然后直接相乘可能会爆的那种情况。
快速幂的原理大概就是把指数变成二进制,就可以把复杂度降到O(log n),比如a^11=a^8a^2a^1
long long p;
long long speedpow(long long a,long long b) //return a^b (^表示乘方)
{
long long ans=1,base=x;
while(b) //当b不为0
{
if(b&1) //即if(b%2==1)
ans=(ans*Base)%p;
Base=(Base*Base)%p;
b>>=1;
}
return ans;
}
long long speedmul(long long a,long long b)
{
long long ans=0;
while(b)
{
if(b&1)
ans=ans*a%p;
a=(a<<1)%p;
b>>=1;
}
return ans;
}