什么是快速幂算法
快速幂是在O(logn)的时间复杂度内计算乘方的算法,采用的是分治法。
算法实现
递归实现
int qpow(int a, int n)
{
if (n == 0)
return 1;
else if (n % 2 == 1)
return qpow(a, n - 1) * a;
else
{
int temp = qpow(a, n / 2);
return temp * temp;
}
}
非递归实现
int qpow(int a, int n){
int ans = 1;
while(n){
if(n&1) //如果n的当前末位为1
ans *= a; //ans乘上当前的a
a *= a; //a自乘
n >>= 1; //n往右移一位
}
return ans;
}
使用场景
计算幂为什么不用Math.pow()呢?
如果结果太大会导致溢出,所以不能直接使用api计算。通常这类题会要求结果取模,既然无法直接使用pow()方法那我们可以自己实现一个pow方法,并且在每一次计算时取模,最后就可以得到实际结果的取模结果了。