m的n次幂的求法

在《Fibonacci数计算中的两个思维盲点及其扩展数列的通用高效解法》提到了一维的求解m^n.

算是比较快的,作个备份。

最基本的求解,没有考虑为负数的情况,下同

int pow0(int m,unsigned int n)
{
int result = 1;
while(n >0)
{
result *= m;
--n;
}
return result;
}

改进版求解

迭代

int pow1(int m, unsigned int n)
{
int result = 1;
int factor = m;

while (n) {
if (n & 1)
result *= factor;
 factor *= factor;
 n >>= 1;
}
return result;
}

非递归版的求解

int pow3(int m, unsigned int n)
{
if (n == 0)
return 1;
unsigned flag = n;
//小等于n的最大的2的k次幂
for (unsigned value = n; value &= (value - 1); flag = value)
;
int result = m;
while (flag >>= 1) {
result *= result;
if (n & flag)
result *= m;
}
return result;

}

只有原文扩展到高维的求解,暂时没有读懂。




 

posted @ 2012-02-29 20:45  westfly  阅读(621)  评论(0编辑  收藏  举报