- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验项目——求最大公约数
1. 实验题目
求两个自然数m和n的最大公约数。
2. 实验目的
⑴ 复习数据结构课程的相关知识,实现课程间的平滑过渡;
⑵ 掌握并应用算法的数学分析和后验分析方法;
⑶ 理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。
3. 实验要求
⑴ 至少设计出三个版本的求最大公约数算法;
⑵ 对所设计的算法采用Θ符号进行时间复杂性分析;
⑶上机实现算法,并用计数法和计时法分别测算算法的运行时间;
⑷ 通过分析对比,得出自己的结论。
一.连续整数检测:
#includeiostream.h
int f1(int m,int n)
{ int t; if(mn)t=n;
else t=m; while(t) {
if(m%t==0n%t==0)break;
else t=t-1; } return t; }
void main() { int a,b;
cout请输入两个整数: ;
cinab;
cout最大公约数是: ;
coutf1(a,b)endl; }
根据代码考虑最坏情况他们的最大公约数是1,循环做了t-1次,最好情况是只做了1次,可以得出O(n)=n/2;
二.欧几里得算法#includestdio.h
void main()
{
int r,n,m,t;
printf(请输入两个正整数:\n);
scanf(%d,%d,n, m);
if(nm)/*选出较大数*/
{
t=n;
n=m;
m=t;
}
while(m!=0)/*辗转取余算法*/
{
r=n%m;
n=m;
m=r;
}
printf(它们的最大公约数为:%d\n,n);
}
根据代码辗转相除得到欧几里得的O(n)= log n
三.递归算法
#includestdio.hint f(long a,long b){long s,t=a%b; if(t==0)s=b;else s=f(b,t); return s;}int main(){long a,b,t; scanf(%ld%ld,a,b); if(ab){t=a;a=b;b=t;} printf(%ld\n,f(a,b));}}
时间复杂度:T(n)=O(n); 基本语句执行次数C(n)=n#includeiostream.h
#includestdio.h
#includestdlib.h
#includetime.h
#define N 100
int w,w2,w3;//用于计数
int f1(int m,int n)
{ int t; if(mn)t=n;
else t=m; while(t)
{ if(m%t==0n%t==0)break;
else t=t-1; w++; } return t; }
int f2(int m,int n) { int r;
r=m%n;w2=1; while(r!=0)
{ m=n; n=r;
r=m%n; w2++; }
return n; } int f3(int m,int n)
{ int i=2,j=0,h=0; int a[N],b[N],c[N];
while(in) { if(n%i==0)
{ j++; a[j]=i;
n=n/i; w3++;
} else
{ i++; w3++; }
} j++; a[j]=n; i=1;
int u; u=j; while(i=j) {
//printf(%d ,a[i]);
i++; w3++; }
//printf(\n);
i=2; j=0; while(im)
{ if(m%i==0)
{ j++; b[j]=i;
m=m/i; w3++; }
else { i++; w3++;
} }
j++; b[j]=m; i=1;
while(i=j) {
//printf(%d ,b[i]);
i++; w3++;
} int k=1;
for(i=1;i=j;i++)
{ for(k=1;k=u;k++) {
if(b[i]==a[k]) {
w3++; h++;
c[h]=a[k];//printf(\n%d ,c[h]); a[k]=a[k+1]; break;
} } } k=1; while(h1) { k=k*c[h]*c[h
文档评论(0)