如果选用蛮力算法对a进行n-1次相乘,算法的时间复杂度为O(n)

采用分治算法,将a^n看作两部分幂的乘积,每一部分都是一个子问题,即

a^{n}=a^{2/n}\times{a^{2/n}}                         n为偶数

a^{n}=a^{(n-1)/2}\times {a^{(n-1)/2}} \times {a}      n为奇数

该情况下的时间复杂度W(n)为:

W(n) = W(2/n) + O(1)

W(1) = 0

于是得到W(n)=O(\log n)

C语言程序实现如下:

//例2.2(分治算法)
//输入:n、a,a为给定的实数,n为自然数
//输出:a^n的结果
#include<stdio.h>
#include<stdlib.h>
int fun(int a,int n)
{
	int result;
	if(n==1)
	{
		return a;
	}
	else if(n==0)
	{
		return 1;
	}
	else if(n%2==0)
	{
		result = fun(a,n/2) * fun(a,n/2);
		return result;
	}
	else
	{
		result = fun(a,(n-1)/2) * fun(a,(n-1)/2) * a;
		return result;
	}
}

int main()
{
	int a,n,result;
	printf("请输入a的值:");
	scanf("%d",&a);
	printf("请输入n的值:"); 
	scanf("%d",&n);
	result=fun(a,n);
	printf("a^n = %d",result);
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐