快速幂
来源:互联网 发布:js 对象排序 编辑:程序博客网 时间:2024/06/07 05:39
参考百度百科
快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。
原理
以下通过求a^b来介绍
首先把b转换成二进制数,该二进制数第i位的权为 2^(i-1)
例如:13的二进制表示为1101
因此,我们将a^13转化为算a^(2^3)*a^(2^2)*a(2^0)
实现
可以通过位运算来快速实现,通过将b&1来判断b的最小的一位是否为1来做乘法运算
double ans=1.0;double cur=a;while(b){ if(b&1)ans*=cur; cur*=cur; //翻倍,因为a^(2^(i+1))与a^(2^i)是倍数关系 //即a^(2^(i+1))=a^(2^i)*a^(2^i) b>>1;}
详细代码如下:
double Power(double base, int exponent) { double ans = 1.0; double cur = base; while (exponent){ if (exponent & 1)ans *= cur; cur *= cur; exponent >>= 1; } return ans; }
阅读全文
0 0
- 快速矩阵快速幂
- 快速幂,快速幂取模
- 快速幂 + 快速幂取模
- 快速幂 快速幂取模
- 快速幂&&快速乘法
- 快速幂&快速乘
- 快速幂 快速乘法
- 快速幂 快速幂取模
- 快速幂+快速乘法
- 【快速幂】【快速幂取模】
- 快速乘法-快速幂
- 快速乘/快速幂/矩阵快速幂
- 快速乘 快速幂 矩阵快速幂
- 快速幂,快速幂取模,矩阵快速幂
- 快速幂
- 快速幂
- 快速幂
- 快速幂
- js正则函数match、exec、test、search、replace、split使用介绍集合
- 程序员实用网址
- codeforces 814C An impassioned circulation of affection(尺取法模板)
- 2017多校联合第三场 1003题 hdu 6058 Kanade's sum 链表
- Android 规范
- 快速幂
- WebSocket使用(C++环境)(三) --- 自己解析websocket协议及websocket聊天demo
- ios 图片显示模式 scaleAspectFit 后的处理
- Swift is like Kotlin
- 并查集模板
- 计数与递推
- 《机器学习技法》学习笔记01——线性SVM
- Oracle可视化工具
- sqlite不同系统下的安装