快速幂
来源:互联网 发布:手机淘宝联盟自己购买 编辑:程序博客网 时间:2024/05/01 18:27
采用二分的方法,复杂度O(logn)
取模的话可以直接加在函数里
int fast(int a,int n){//计算a的n次方 if(n==0)return 1; if(n%2)return a*fast(a,n-1); int tmp=fast(a,n/2); return tmp*tmp;}
也可以采用循环写法,避免爆栈
int fast(int a,int n){ int ret = 1; while(n>0){ if(n%2)ret*=a; n>>=1; a*=a; } return ret;}
如果计算 (a^n)%c ,其中a,n,c数据最大为 2^63-1 的话,上述方法虽然速度很快,但其中的乘法的中间值会超过 2^64-1(计算机最长数据),那如何解决乘法溢出问题呢?
方法就是模拟计算机的乘法过程:
数字采用二进制表示后,模拟手算过程,比如
a = 1011,b=101
1011 * 101 ------ 1011 0000 1011
当b的某一位上是1时就将a照搬下来,是0时就全为0
当a照搬下来时要对应的在后面补0
最后相加即得乘法结果
int mult(int a,int b){ int sum=0; while(b){ if(b&1)sum+=a; a<<=1; b>>=1; } return sum;}
然后将取模操作加入其中即可
0 0
- 快速矩阵快速幂
- 快速幂,快速幂取模
- 快速幂 + 快速幂取模
- 快速幂 快速幂取模
- 快速幂&&快速乘法
- 快速幂&快速乘
- 快速幂 快速乘法
- 快速幂 快速幂取模
- 快速幂+快速乘法
- 【快速幂】【快速幂取模】
- 快速乘法-快速幂
- 快速乘/快速幂/矩阵快速幂
- 快速乘 快速幂 矩阵快速幂
- 快速幂,快速幂取模,矩阵快速幂
- 快速幂
- 快速幂
- 快速幂
- 快速幂
- HDU 1518 Square 搜索
- Python学习笔记(一)
- SharedPreference 工具类
- CSS3弹性布局align-items和align-self垂直轴方向行对齐属性详解及实例
- C++工作现在需求怎么样,如何应对
- 快速幂
- Android中Notification的使用
- PAT-A1061 Dating (20)(模拟)
- 统计你的手机号码中出现次数最多的数字,并打印出此数字及其出现次数
- 【小笔记】设置圆角、边框
- Android自定义控件
- uva 11461 数学
- POJ2516 Minimum Cost(K次费用流)
- 效率: 条款23 考虑使用其他程序库