算法学习快速幂

Posted rign

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法学习快速幂相关的知识,希望对你有一定的参考价值。

快速幂可真是一个好东西

我觉得和高精度,或者快速幂模搭配

 

首先

快速幂是利用二进制表示指数,利用二分的思想来进行幂的运算

a^11=a^(1*2^0+1*2^1+0*2^2+1*2^3)

typedef long long LL;

LL quick_pow(int n,int x){
    LL ans=1,base=n;
    while(x){
        if(x&1) ans*=base;
        base*=base;
        x/=2;//x>>=1;
    }
    return ans;
}

 

就是底数不断地从a*2^0->a*2^1->a*2^2

而是否让ans*当前底数取决于当前指数的二进制最后一位,例如

11的二进制表示为1011,

第一次为1,√

第二次为1,√

第三次为0,×

第四次为1,√

表示就是if(x&1),表示最后一个是否为1,&是且操作

而base*base就是底数的不断上升

 

最后return ans即可

以上是关于算法学习快速幂的主要内容,如果未能解决你的问题,请参考以下文章

《算法零基础100讲》(第15讲) 二分快速幂

快速幂

ACM必备算法:快速幂(Java)

快速幂初步学习

算法初步:快速乘,快速幂,矩阵快速幂

六十八快速幂算法牛顿迭代法累加数组+二分查找的变形