快速幂算法的理解
来源:互联网 发布:网络咨询医生招聘 编辑:程序博客网 时间:2024/05/15 12:17
首先给出代码:
#include <iostream> using namespace std; //计算a^bmodn int modexp(int a,int b,int n) { int ret=1; int tmp=a; while(b) { if(b&1) ret=ret*tmp%n; tmp=tmp*tmp%n; b>>=1; } return ret; } int main() { cout<<modexp(2,10,3)<<endl; return 0; }
接下来进行讲解,快速幂算法,就是快速求 x^n mod (m) 的快速算法。
比如:
计算 12996^227 mod 37909
设m = 37909 , b = 12996, 令a = 1, 将227二进制表示为:227 = 1 + 2 + 2^5 + 2^ 6 + 2^7;
依次计算 12996^227 = 12996 + 12996^2 + 12996^2^5 + 12996^2^ 6 + 12996^2^7;
运用二进制操作,也就是二分的思想,可以达到O(logn)。二进制扫描从最高位一直扫描到最低位。
运用上面的例子:
if(227&1) //也就是说存在2的某次幂不为0,所以需要计算; ……………… 227>>=1 //右移一位,继续检查。
0 0
- 快速幂算法的理解
- 快速幂的算法理解
- 快速排序算法的理解
- 快速排序算法的理解
- 快速幂的理解
- 深入理解快速排序算法的稳定性
- 快速排序算法理解
- 对快速排序算法的理解与实现
- 排序算法之快速排序的理解与实现
- 简单理解 快速排序算法
- 简单快速理解算法--快速排序
- 神奇的快速幂算法!!
- 快速幂logn的算法
- 简单的快速幂算法
- 快速排序的理解
- 快速阅读的理解
- 快速排序的理解
- 快速排序的理解
- 规则 4.11:注释与其上面的代码应用空行隔开。
- XCode6报数组越界错误的问题
- libcurl 编译详解
- 规则 4.12:函数接口输出参数要对返回码进行详细描述,不同返回码独立成行,并左对齐。
- Linux GCC常用命令
- 快速幂算法的理解
- android 基础知识 字体加粗
- 搞笑的 strlen与 sizeof
- linux安装Hadoop-单机环境
- mac 终端 svn 命令
- Go 语言的 parse 解析器
- iOS UIActionSheet的用法
- linux 下logrorate的理解和配置
- java中null与""的区别