快速幂初步学习
Posted 小九
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速幂初步学习相关的知识,希望对你有一定的参考价值。
快速幂顾名思义就是快速求幂,也常用于求幂的模(余数)
例如求Xq,常规算法是乘q次X,时间复杂度为O(n),而快速幂复杂度为O(log2n),我们看下如何实现
n用二进制可写成2k1+2K2+...2kn
故Xn=X2^k1+2^k2+...+2^kn=X2^k1·X2^k2·...·X2^kn
从二进制n的末尾开始,累乘x,即通项为X2^kn ,若n的该位为1累乘通项,从右往左删掉n的每一位直到n为0
int fun(int x,int n){ int ans=1,base=x; while(n!=0){ if(n&1) //若二进制数最后一位为1返回1 ans*=base; base*=base; n>>=1; //去掉二进制数n最后一位 } return ans; }
以上是关于快速幂初步学习的主要内容,如果未能解决你的问题,请参考以下文章