快速幂
来源:互联网 发布:淘宝上伊芙丽假货多吗 编辑:程序博客网 时间:2024/06/14 05:44
传统的的求幂的计算方法例如2的13次方,程序需要进行一步步运算2*2*2*2。。。。。*2,我们会发现这样在时间线上计算机会推的很远,导致时间复杂度较高,不适合大数据量的运算,所以引入快速幂的概念,设想一下,假设我们先对这个公式进行拆分,计算每一部分的2*2=4,那么公式可以转化为4*4*4*4*4*4*2(后面剩余一个2),同样再往上计算4*4=16,使得公式变为16*16*16*2,在每一小部分同时进行计算的时候,我们可以发现同一时间分段我们完成了更高效的计算,这样可以有效的降低时间复杂度,那么怎样去做到分小部分进行运算呢,这就要求我们的程序不能单纯的执行单线任务,而要进行多运算同时处理,类似于树一样,进行层层运算,所以我们可以运用递归来实现。
下面是基本快速幂代码,采用的就是上述思想
long long pow(long long a,long long b){ if(b==0) return 1; else if(b==1) return a; else { int c=pow(a,b/2); if(b%2==0) return c*c; else return c*c*a; }}
下面是我从书中找到的用位运算对快速幂进行优化
long long pow(long long x,long long n){ long long result; if(n==0) return 1; else { while((n&1)==0)//n&1=0说明n为偶数 { n>>=1;//即n/=2 x*=x; } } result=x; n>>=1; while(n!=0) { x*=x; if((n&1)!=0) result*=x; n>>=1; } return result;}
快速幂取模
long long int text(long long int a,long long int b,long long int c){ long long int ans=1; a=a%c; while(b>0) { if(b%2==1) ans=(ans*a)%c; b/=2; a=(a*a)%c; } return ans;}
阅读全文
0 0
- 快速矩阵快速幂
- 快速幂,快速幂取模
- 快速幂 + 快速幂取模
- 快速幂 快速幂取模
- 快速幂&&快速乘法
- 快速幂&快速乘
- 快速幂 快速乘法
- 快速幂 快速幂取模
- 快速幂+快速乘法
- 【快速幂】【快速幂取模】
- 快速乘法-快速幂
- 快速乘/快速幂/矩阵快速幂
- 快速乘 快速幂 矩阵快速幂
- 快速幂,快速幂取模,矩阵快速幂
- 快速幂
- 快速幂
- 快速幂
- 快速幂
- java中的String类常量池详解
- 设计模式——六大原则
- JVM内存模型之栈
- ## Java集合框架之-----List ##
- HTML5的语法和新属性
- 快速幂
- ral2html-寄存器文档工具
- 命令行参数的应用
- H5——canvas——动态时钟
- Leetcode#258. Add Digits (数字根)
- 设计模式之代理模式
- 月亮?是啊,今晚的月亮真美啊。
- xshell连接VM虚拟机上下左右及退格键不正常问题
- 双边滤波算法原理