快速幂及其简单应用
2017-02-10 03:55
232 查看
快速幂
什么是快速幂呢,举个例子。
2的16次方。
我们当然可以乘16次2,但是不够快,可能会被时间卡住。
需要换种方式思考——
2的16次方
不就是4的8次方
不也是16的4次方
不还是256的2次方么?
——大体思路就如上所示。
再思考下相关细节——
如果改成2的17次方了,多出来个2,有点不好处理。
看来仅靠初始的那一个变量不断自我平方得出答案有点困难,再设个专门记结果的变量记结果吧。
试试让初始变量保持过去的策略,每次多出来点什么就先让记结果的变量先记上。等到最后那个初始变量膨胀到指数为1的时候再乘到结果变量上
17次方只是16+1,我们换个麻烦点的例子,2的15次方
第一回合:
15为奇数,先-1为14,同时记到结果变量的头上——
初始变量:2的14次方 结果变量:1*2=2
第二回合:
初始变量膨胀一次——
初始变量:4的7次方 结果变量:2
第三回合:
7为奇数,先-1为6,同时记到结果变量头上——
初始变量:4的6次方 结果变量:2*4=8
第四回合:
初始变量膨胀一次——
初始变量:16的3次方 结果变量:8
第五回合:
记一次结果——
初始变量:16的2次方 结果变量:8*16=128
第六回合:
初始变量膨胀一次——
初始变量:256的一次方 结果变量:128
第七回合:
由于已经是一次方了,初始变量膨胀到最大,直接乘到结果出数,即128*256为最终结果。
最后奉上鄙人不成器的代码,如果能尽绵薄之力则不胜欣喜。
矩阵幂改天再补吧
什么是快速幂呢,举个例子。
2的16次方。
我们当然可以乘16次2,但是不够快,可能会被时间卡住。
需要换种方式思考——
2的16次方
不就是4的8次方
不也是16的4次方
不还是256的2次方么?
——大体思路就如上所示。
再思考下相关细节——
如果改成2的17次方了,多出来个2,有点不好处理。
看来仅靠初始的那一个变量不断自我平方得出答案有点困难,再设个专门记结果的变量记结果吧。
试试让初始变量保持过去的策略,每次多出来点什么就先让记结果的变量先记上。等到最后那个初始变量膨胀到指数为1的时候再乘到结果变量上
17次方只是16+1,我们换个麻烦点的例子,2的15次方
第一回合:
15为奇数,先-1为14,同时记到结果变量的头上——
初始变量:2的14次方 结果变量:1*2=2
第二回合:
初始变量膨胀一次——
初始变量:4的7次方 结果变量:2
第三回合:
7为奇数,先-1为6,同时记到结果变量头上——
初始变量:4的6次方 结果变量:2*4=8
第四回合:
初始变量膨胀一次——
初始变量:16的3次方 结果变量:8
第五回合:
记一次结果——
初始变量:16的2次方 结果变量:8*16=128
第六回合:
初始变量膨胀一次——
初始变量:256的一次方 结果变量:128
第七回合:
由于已经是一次方了,初始变量膨胀到最大,直接乘到结果出数,即128*256为最终结果。
最后奉上鄙人不成器的代码,如果能尽绵薄之力则不胜欣喜。
int fast_pow(int n,int m) //n的m次方 { long long int key = 1; //考虑到可能出现的计数次幂而出现的专门记答案的变量 while(m > 1) { if(m % 2 == 1) //当然了这句可以改成和1取与 { m--; //当然了这句写不写都一样,反正最后/2了也会把这个多出来的部分削去 key* = n; } n *= n; m /= 2;//这句通常都写成位运算右移一位,形如m>>1,不光是因为二者一个效果,靠位运算来理解的话自有另一套理解方式,不过那样的理解方式有点容易吓跑没(像)耐(我)心(这)看(种)的新手。 } key *= n; return key; }
矩阵幂改天再补吧
相关文章推荐
- 隐马尔可夫模型及其在分词中的简单应用
- ISD1700系列的SPI操作,及其与MEGA16的简单应用
- 一起来学ASP.NET Ajax(六)之UpdatePanel简单应用及其原理
- 数据结构与算法学习笔记——堆栈及其应用(10以内简单四则计算器)
- 【jquery模仿net控件】简单的datalist控件更新,及其简单应用
- 多线程的基本概念及其简单应用
- Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合
- Trie 树及其简单应用
- (转)链式前向星及其简单应用
- 向量的范数及其一个简单的应用
- kmp算法的思想及其简单应用(java版)
- 隐马尔可夫模型及其在分词中的简单应用
- Delphi 画布对象及其简单应用
- 欧拉回路及其简单应用
- 注册应用程序到url协议上及其简单应用
- ADOdb类库及其简单应用
- SeqList.h (顺序表及其简单应用)
- Delphi 画布对象及其简单应用
- 【jquery模仿net控件】初步GridView模型实现,及其简单应用
- Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合