快速幂取模算法【模板】
来源:互联网 发布:生化奇兵 海葬 知乎 编辑:程序博客网 时间:2024/06/05 02:01
快速幂取模其实是a^b%c,这就是著名的RSA公钥加密的方法,当a,b都很大的时候,直接求是不可取的,所以就用到了快速幂取模。
首先你得明白他的原理,其实是用到了二分的思想,把b按照二进制展开
b = p(n)*2^n + p(n-1)*2^(n-1) +…+ p(1)*2 + p(0)。其中p(i) (0<=i<=n)为 0 或 1。
所以此时a^b = a^ (p(n)*2^n + p(n-1)*2^(n-1) +...+ p(1)*2 + p(0))= a^(p(n)*2^n) * a^(p(n-1)*2^(n-1)) *...* a^(p(1)*2) * a^p(0);
对于p(i)=0的情况不用处理,因为a^(p(i) * 2^(i-1) ) = a^0 = 1;
所以我们需要考虑的仅仅是p(i)=1的情况,化简得:
a^(2^i) = a^(2^(i-1) * 2) = ( a^( p(i) * 2^(i-1) ) )^2
【http://baike.baidu.com/view/1431260.htm】此处有详细的介绍。
这里给出非递归的方法:
- long long modexp(long long a, long long b, int mod)
- {
- long long res=1;
- while(b>0)
- {
- //a=a%mod;(有时候n的值太大了会超出long long的储存,所以要先取余)
- if(b&1)//&位运算:判断二进制最后一位是0还是1,&的运算规则为前后都是1的时候才是1;
- res=res*a%mod;
- b=b>>1;//相当于除以2;
- a=a*a%mod;
- }
- return res;
- }
0 0
- 快速幂取模算法模板
- 快速幂取模算法模板
- 快速幂取模算法【模板】
- 快速幂取模算法模板
- 快速幂取模模板算法
- 快速幂取模算法【模板】
- 算法模板之快速幂取模
- 快速幂算法模板
- 快速幂算法模板
- 矩阵快速幂 算法模板
- 【模板】快速幂取模
- 二进制快速幂取模模板
- 快速幂取模讲解&模板
- 快速幂取模模板
- 快速幂取模运算模板
- 快速幂取模 模板
- 【模板】快速幂取模
- 快速排序算法模板(STL)
- mysql-python:_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h' 非权威指南
- CToolTipCtrl 两种用法
- 使用myeclipse上传项目到GitHub时发生master: master [rejected
- 欢迎使用CSDN-markdown编辑器
- 题目1151:位操作练习
- 快速幂取模算法【模板】
- SpringMVC 基于注解的Controller详解
- HTML5第六课时,padding内边距
- linux目录为树结构
- Socket 通讯学习
- 利用ajax提交表单,实现数据前端后台数据交互的完整流程演示
- GraphicsLab Project之Parallel Split Shadow Map(PSSM)
- 缓存的基本知识
- 美丽的心形函数