快速求幂算法
2016-04-07 12:42
246 查看
在写一个数的幂运算的时候我们通常会想到比较直观的O(N)算法,代码如下
#include<stdio.h> int main() { int pow = 5;//指数 int num = 2;//底 int res=1;//结果 while (pow>0) { res *= num; pow--; } printf("%d", res); }
最近在做数据结构习题的时候学习到了一中快速求幂算法,时间复杂度为log2(N).
这个算法运用到了二进制数的除2运算,二进制的除法与十进制基本类似,下面举一个例子23/2,结果为1011余1
所以23(10111)/2(10)=(11)1011,23(10111)%2(10)=1.
在计算2^23时我们就可以通过计算2^16(10000),2^4(100),2^2(10),2^1(1)然后相乘,将其分解成了这几个部分相乘。
下面是代码实现
void QuickPower(int Coefficient,int Exponent) { int result = 1; while (Exponent!=0) { if (Exponent % 2) result *= Coefficient; Coefficient *= Coefficient; Exponent = Exponent / 2; } return result; }
相关文章推荐
- adb复制文件命令
- iOS 获取通讯录里边的电话号码AddressBook
- Redis安装和配置
- 【转】SSL/TLS/WTLS协议原理
- 深入理解计算机系统 第七章
- Java常量,变量和数据类型
- com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method 错误处理
- Shiro学习(12)与Spring集成
- 第七周 可执行程序的卸载
- GCJ 2009 Problem A. Crazy Rows【位运算要加LL】
- python将mysql表中数据抽取到另一个mysql库中,持续更新抽取到oracle中
- 腾讯笔试题 生成格雷码
- 杨辉三角
- 2016—04—07 北京
- swustOJ 1107 单向公路
- nested exception is java.io.FileNotFoundException: class path resource [spring/spring-datasource-mog
- Lua学习教程之 可变參数数据打包与解包
- Oracle中的自动增长字段
- 运维核心之一 CMDB
- Redis命令-有序集合-zcount