问题:求a^b mod c
常规算法
int mod(int a,int b,int c)
{
int i,ans=1;
for(i=0; i<b; i++)
ans=(ans*a)%c;
return ans;
}
常规算法的时间复杂度为O(n),如果b的取值较大时,就会超时。
快幂算法
数学基础:a^b mod c=((a^2)^(b/2)) mod c b为偶数时;
a^b mod c=(a*(a^2)^(b/2)) mod c b为奇数时。
int quickmode(int a,int b,int c)
{
int ans=1;
while(b)
{
if(b%2==1)
ans=(ans*a)%c;
a=(a*a)%c;
b/=2;
}
return ans;
}