快速幂取模
基于二分及位操作,用来快速求a的n次方对M取模,时间复杂度为O(logn)相比常规方法O(n)有极大提升
其原理为把a^n分为a^(n/2)*a^(n/2)。并一直二分下去
代码:
typedef long long LL;
递归:
LL emo(LL a,LL n,LL M) //计算a^n%M
{
if(n==0) return 1;
if(n==1) return a%M;
LL t=emo(a,n>>1,M);
if(n&1) return t*t*a%M;
else return t*t%M;
}循环:
LL emo(LL a,LL n,LL M)
{
LL r=1;
while(n>0)
{
if(n&1) r=r*a%M;
a=a*a%M;
n=n>>1;
}
return r;
}

浙公网安备 33010602011771号