您的位置:首页 > 其它

高效幂算法

2015-06-16 17:11 239 查看
《数据结构与算法分析》mark.Allen.weiss中提供的分治算法

(美) Mark Allen Weiss

计算一个整数的幂 XN 的常见算法是使用 N-1 次乘法自乘。然而我们可以找到更好的算法。可以应用这样一种递归算法:如果
N 是偶数,有XN=XN/2 * X N/2 , 如果 N 是奇数,则有 XN =X (N-1)/2 * X (N-1)/2 * X 。

为了说明这个算法为什么更高效,我们举一个例子。例如计算 X62 ,用第一种的常见算法我们要做61次自乘。而用第二种算法只要做9次乘法:

X3=(X2)X , X7=(X3)2X , X15=(X7)2X , X31=(X15)2X ,
X62=(X31)2

因为求 X3 X7 X15 X31 各做了两次乘法,最后求 X62 又做了一次乘法,总共就是9次。



#include<iostream>
using namespace std;
long pow_s(int x, int n)//x的n次方
{
	if (n == 0)
	{
		return 1;
	}
	if (n == 1)
	{
		return x;
	}
	if (n % 2 == 0)
	{
		return pow_s(x*x, n / 2);
	}
	else
	{
		return pow_s(x*x, n / 2)*x;
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: