快速幂

什么是快速幂算法

快速幂是在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方法,并且在每一次计算时取模,最后就可以得到实际结果的取模结果了。

posted @ 2021-07-04 14:00  归鸿唱晚  阅读(43)  评论(0编辑  收藏  举报