在求a^b时,时间复杂度很高O(n),而快速幂可以通过分治将时间复杂度降低到O(logn)
讨论b为偶数,a^b=a^b/2 * a^b/2
b为奇数,a^b=a^b/2 * a^b/2 * a
//递归求a^b%n
int quickpow(int a,int b,int n)
{
if(b==1)return;
if(b%2==0)
{
int t=quickpow(a,b/2,n);
return t*t%n;
}
else
{
int t=quickpow(a,b/2,n);
t=t*t%n;
t=t*a%n;
return t;
}
}
//非递归求a^b%n
int quickpow(int a,int b,int n)
{
int ans=1;
while(b)
{
if(b%2)ans=ans*a%n;
a=a*a%n;
b/=2;
}
return ans;
}