算法最大公约数.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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.h int 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)

bhl0572 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档