快速幂取模
来源:互联网 发布:windows exec 编辑:程序博客网 时间:2024/06/15 18:15
快速幂取模
快速幂取模算法用来解决a^b%c的问题。
当然,该问题可以使用a*b%c=((a%c)*b)%c的公式,进行化简。但是这样子对于只能解决数值比较小的情况,其算法复杂度依旧是O(n)。为了降低时间复杂度,我们可以使用快速幂取模算法,其时间复杂度可以达到O(log n)。
快速幂取模的本质思想就是:把指数b按二进制展开,从高位到低位依次进行取模运算。其中可以使用递归算法实现,也可以不用递归算法。
由于各项之间都是2倍的关系,所以我们可以使用递归的思想来实现:
递归方式:
int modexp_recursion(long int a, long int b, long int n) { int t = 1; if (b == 0) return 1; if (b == 1) return a%n; t = modexp_recursion(a, b>>1, n); t = t*t % n; if (b&0x1) { t = t*a % n; } return t; }
非递归方式:(截取自师兄的代码,那个函数写的漂亮~)
#include<iostream>using namespace std;__int64 mod(__int64 a,__int64 b,__int64 c) { __int64 m=1; while(b>=1) { if(b%2==1) m=a*m%c; a=a*a%c; b=b/2; } return m; }int main(){ __int64 a,b,c,result; while(scanf("%I64d%I64d%I64d",&a,&b,&c)!=EOF) { if(b==0) printf("%I64d\n",1%c); else { result=mod(a,b,c); printf("%I64d\n",result); } } return 0;}
0 0
- 快速幂,快速幂取模
- 快速幂 + 快速幂取模
- 快速幂 快速幂取模
- 快速幂 快速幂取模
- 【快速幂】【快速幂取模】
- 快速幂,快速幂取模,矩阵快速幂
- 快速幂取模
- 快速幂取模
- 快速幂取模
- 快速幂取模
- 快速幂取模
- 快速幂取模
- 快速幂取模
- 快速幂取模
- 快速幂取模
- 快速幂取模
- 快速幂取模
- 快速幂取模
- python批量删除文件
- Mac下配置cocos2d-x开发环境
- PNG透明背景按钮的实现(MFC)
- GDI入门实例(在VC++6.0中将JPG格式图片转换成BMP格式)
- 获取指定文件下的mp3文件
- 快速幂取模
- ext js 5.0 SAMPLES
- POJ 1654 Area [多边形面积]
- Android 去除标题栏
- 都学了这么久的C语言了,printf函数里面的一个用法还没记住
- strchr()、strrchr()、strchrnul()函数
- 入门训练1_Fibonacci数列
- 用python将SQL格式文件改成自己想要的格式
- Oracle中的with