/*高次幂求模,当p为奇数时分解为p/2和(p+1)/2,而下面的是直接分解为p/2,p/2,
少乘了一次,故需要补上*/
int PowMod(int a,int p,int m)
{
int result = 1;
while(p>0)
{
if (p%2)
result = (result*a)%m;
a = (a*a)%m;
p>>=1;
}
return result;
}
下面这个博客讲得还算清晰的:
/*高次幂求模,当p为奇数时分解为p/2和(p+1)/2,而下面的是直接分解为p/2,p/2,
少乘了一次,故需要补上*/
int PowMod(int a,int p,int m)
{
int result = 1;
while(p>0)
{
if (p%2)
result = (result*a)%m;
a = (a*a)%m;
p>>=1;
}
return result;
}
下面这个博客讲得还算清晰的: