快速幂&快速幂取模算法
来源:互联网 发布:精美的php 个人博客 编辑:程序博客网 时间:2024/04/23 18:20
在平时我们需要求一个a^b时,一般会用c++自带的pow()函数对吧,可是加入数据十分大时,pow()是十分慢的,这个时候我们需要一个能高效求出a^b的算法,这这时就出现了快速幂算法。
假如我们需要求3^999,那么我们是不是可以发现3^999 =3 ^ (512 + 256 + 128 + 64 + 32 + 4 + 2 + 1)=(3 ^ 512) * (3 ^ 256) * (3 ^ 128) * (3 ^ 64) * (3 ^ 32) * (3 ^ 4) * (3 ^ 2) * 3。我们可以先把999拆开,拆成 (512 + 256 + 128 + 64 + 32 + 4 + 2 + 1),这时会发现他们是2的n次方。就可以使用分治的思想把(3 ^ 512) 、(3 ^ 256) 、 (3 ^ 128) 、 (3 ^ 64) 、(3 ^ 32) 、(3 ^ 4) 、 (3 ^ 2) 、3^1分别求出后再相乘,就有了递归算法。
int recursion(int a,int b){ int tem = 1; if(b == 0)return 1; else if(b == 1)return a; tem = tem*recursion(a,b>>1); tem = tem*tem; if(b&1)tem = tem*a; return tem;}
将快速幂递归算法改进后就有了递推算法
int loop(int a,int b){int tem = 1,ret = a;while(b > 0){if(b&1)tem = tem*ret;ret = ret*ret;b >>= 1;}return tem;}
这就是快速幂算法,当然很多时候我们还会遇到一个(a^b)%c其中a^b非常大,就有了快速幂取模算法。
int quickpow(int a,int b,int k){int tem = 1,ret = a;while(b > 0){if(b&1)tem = (tem*ret)%k;ret = (ret*ret)%k;b >>= 1;}return tem;}
0 0
- 快速幂&快速幂取模算法
- 快速幂,快速幂取模
- 快速幂 + 快速幂取模
- 快速幂 快速幂取模
- 快速幂 快速幂取模
- 【快速幂】【快速幂取模】
- 快速幂取模算法模板
- 快速幂取模算法
- 快速幂取模算法实现
- 快速幂取模算法
- 快速幂取模算法
- 快速幂取模算法
- 快速幂取模算法
- 快速幂取模算法
- 快速幂取模算法模板
- 快速幂取模算法
- 快速幂取模算法
- 快速幂取模算法
- ArcGIS Pro 简明教程(3)数据编辑
- React-Native_01:开山篇
- SpringMVC的四种HandlerMapping
- Android Studio 快捷键记录(eclipse)
- springmvc异常处理
- 快速幂&快速幂取模算法
- 数据库表损坏解决方法( is marked as crashed and should be repaired)
- Java基础面试题
- 调用动画
- 再学数据结构之顺序表(一)
- mxGraph控制vertex的label信息
- AFNetWorking监听网络状态
- scala程序控制结构
- WebView不能够调起本地相册解决