算法学习快速幂
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即可
以上是关于算法学习快速幂的主要内容,如果未能解决你的问题,请参考以下文章