您的位置:首页 > 其它

快速求幂算法

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: