整数快速幂-归纳法
来源:互联网 发布:淘宝怎么秒杀成功 编辑:程序博客网 时间:2024/06/07 09:50
计算x的n次幂的朴素算法复杂度为O(N),我们还有一种复杂度为O(log N)的快速幂方法。
基本思想:
1. 令m=n/2。 假设已经知道如何计算xm,再来求xn。
2. 分两种情况:
如果n为偶数,xn=(xm)2
如果n为奇数,xn=x(xm)2
根据这个思想,可以得出递归的算法:
伪代码:
C++代码:
- int quickpower(int a, int n) {
- if (n == 0)
- return 1;
- if (n % 2 == 1)
- return quickpower(a, n / 2) * quickpower(a, n / 2) * a;
- else
- return quickpower(a, n / 2) * quickpower(a, n / 2);
- }
我们推导出迭代的算法。
推导过程:
求实数x的n次方法:
1. 令n表示为二进制dk,dk-1,…d0。n=2k+2k-1+…+20
2. 令y=1.
3. 从左到右扫描二进制数字,如果当前数字为0,y赋值y2,如果当前数字为1,y赋值xy2。
伪代码:
私家珍藏两版C++代码:
1.
- //a^n%mod
- long long pow_mod(long long a, long long n, long long mod)
- {
- long long ret = 1; //返回的值
- while (n)
- {
- if (n % 2 == 1) ret = ret*a%mod; //n&2==1表示低位为1,因此要乘上去
- a = a*a%mod; //a倍增
- n /= 2; //n除以2,转到下一位
- }
- return ret;
- }
2.
- long long pow_mod(long long a,long long n,long long mod)
- {
- long long ret=1;
- while (n)
- {
- if (n & 1) ret = ret*a%mod;
- a = a*a%mod;
- n >>= 1;
- }
- return ret;
- }
阅读全文
0 0
- 整数快速幂-归纳法
- 001-整数快速幂-归纳法-《算法设计技巧与分析》M.H.A学习笔记
- 算法笔记01--归纳法之整数幂
- 整数快速幂
- poj1995- 整数快速幂
- B - 整数快速幂
- 整数快速幂
- 整数快速幂【模板】
- 整数快速幂
- 整数快速幂
- 快速幂(整数)
- 整数快速幂
- 矩阵快速幂之整数快速幂
- hdu2817之整数快速幂
- 快速计算整数的幂
- Java大整数快速幂
- HDU 5478 Can you find it(数学归纳法 + 快速幂)——2015 ACM/ICPC Asia Regional Shanghai Online
- 【NOIP模拟题】【数学归纳法】【卡特兰数】【快速幂】【费马小定理】【逆元】2011.11.12第一题题解
- 第一天总结
- 【DSP】TMS320F28035 GPIO例程
- 某公司要开发”天天灌水论坛”,请使用面向对象的思想,设计注册用户信息
- Java中的equals();
- MySql事务隔离级别是啥?
- 整数快速幂-归纳法
- JS ES6箭头函数
- Android 程序的运行过程
- JS里的事件委托
- 2017暑期ACM俱乐部个人训练赛第3场 7.28
- eclipse安装Gradle插件
- Unity里的Mesh属性
- 机器学习精简教程之二——用scikit-learn求解一元线性回归问题
- C语言——实例032 Press any key to change color, do you want to try it. Please hurry up!