快速幂取模
int pow(int a,int b,int c)
{
int ans=1;
a=a%c;
while(b!=0)
{
if(b&1)
ans=(ans*a)%c;
a=(a*a)%c;
b>>=1;
}
return ans;
}
int pow(int a,int b)
{
int r=1,c=a;
while(b!=0)
{
if(b&1)
r*=c;
c*=c;
b>>=1;
}
return r;
}
代码(当数很大时,longlong也会爆的时候,化乘为加):
LL mul(LL a,LL b)
{
LL ans=0;
while(b)
{
if(b&1) ans=(ans+a)%p;
a=(a+a)%p;
b=b>>1;
}
return ans;
}
LL Pow(LL a,LL b)
{
LL result=1;
LL base=a%p;
while(b)
{
if(b&1) result=mul(result,base)%p;
base=mul(base,base)%p;
b=b>>1;
}
return result;
}