码迷,mamicode.com
首页 > 编程语言 > 详细

【算法学习】快速幂

时间:2018-11-19 17:26:08      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:type   pow   span   amp   return   三次   nbsp   二分   快速   

快速幂可真是一个好东西

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

 

首先

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

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即可

【算法学习】快速幂

标签:type   pow   span   amp   return   三次   nbsp   二分   快速   

原文地址:https://www.cnblogs.com/rign/p/9983718.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!