快速幂
来源:互联网 发布:js offsetwidth 编辑:程序博客网 时间:2024/05/19 20:41
原理编辑
以下以求a的b次方来介绍[1]
把b转换成二进制数。
该二进制数第i位的权为
例如
11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将a¹¹转化为算
实现编辑
快速幂可以用位运算这个强大的工具实现
1
b and 1{也就是取b的二进制最低位(即第0位) 判断b是否为奇数,是则为1}
1
b shr 1{就是去掉b的二进制最低位(即第0位)}
有了这个强大的工具,快速幂就好实现了!
以下为pascal的实现:
var a,b,n:int64;function f(a,b,n:int64):int64;var t,y:int64;begin t:=1; y:=a; while b<>0 do begin if(b and 1)=1 then t:=t*y mod n; y:=y*y mod n;{这里用了一个很强大的技巧,y*y即求出了a^(2^(i-1))不知道这是什么的看原理 a^(2^(i-1))*a^(2^(i-1))=a^(2^i) 而且一般情况下a*b mod c =(a mod c)*(b mod c) mod c} b:=b shr 1;{去掉已经处理过的一位} end; exit(t);end;begin read(a,b,n);{n是模} writeln(f(a,b,n));end.
以上即为快速幂的解释与运用,不懂的可以仔细研读。
0 0
- 快速矩阵快速幂
- 快速幂,快速幂取模
- 快速幂 + 快速幂取模
- 快速幂 快速幂取模
- 快速幂&&快速乘法
- 快速幂&快速乘
- 快速幂 快速乘法
- 快速幂 快速幂取模
- 快速幂+快速乘法
- 【快速幂】【快速幂取模】
- 快速乘法-快速幂
- 快速乘/快速幂/矩阵快速幂
- 快速乘 快速幂 矩阵快速幂
- 快速幂,快速幂取模,矩阵快速幂
- 快速幂
- 快速幂
- 快速幂
- 快速幂
- 【JZOJ3885】搞笑的代码
- linux下的ftp访问路径设置
- linux shell编程之利用环境变量IFS自定义分隔符
- C程序(4)
- Spark安装与使用
- 快速幂
- struts 接收参数(通过modelDriver接口)
- 梳理公司的组织架构---组合模式
- 复选框跨页多选实现(js+struts2)
- 【JZOJ3891】【NOIP2014模拟10.25A组】钻石交易
- jsp_03 jsp语法
- C++幼儿园[1] - 项目创建
- [leetcode 81] Search in Rotated Sorted Array II
- codeforces Codeforces Round #392 (Div. 2) A---D