求两个数的最大公约数.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文档。上传文档
查看更多
求两个数的最大公约数 方法一/最简单的算法(效率最低),如下: public static int getMaxDivisor(int a, int b) { int max = 0; int temp = Math.min(a, b); for (int i = temp; i 0; i--) { if (a % i == 0 b % i == 0) { max = i; break; } } return max;// 当max为0时,即没有最大公约数 } 方法二/代码最少的算法,如下: public static int getMaxDivisor(int a, int b){ if(Math.min(a, b)==0){ return Math.max(a, b); }else{ return getMaxDivisor2(Math.min(a, b), Math.max(a, b)%Math.min(a, b)); } } 方法三/方法二的变换,如下: public static int getMaxDivisor(int a,int b){ int x=a; int y=b; while(Math.min(x,y)!=0){ int temp=y; y=Math.min(x,y); x=Math.max(temp,x)%Math.min(temp,x); if(Math.min(x,y)==0){ return Math.max(x,y); } } return Math.max(a,b); } — [讨论]求两个数的最大公约数的问题的算法 主题:[讨论]求两个数的最大公约数的问题的算法 小弟是新人,请教各位了,M 和N 的 最大公约数的算法是什么呢? 谢了! m和n的最大公约数 int temp, r ,p; if(n m) { temp = n; n = m; m = temp; } p =n * m; while(m != 0) { r = n % m; n = m; m = r } m是最大公约, p/n是最小公倍 #include stdafx.h #include iostream.h int main(int argc, char* argv[]) { int m,n; cinmn; if(m=nn%m==0) cout最大公约数是nendl; else { if(n=mm%n==0) cout最大公约数是mendl; else cout最大公约数是m*nendl; } return 0; } 在c++6.0中试一下 用碾转相除法 #includestdio.h void main() { int m,n,r,temp,p; printf(请输入两个正整数n,m:); scanf(%d,%d,m,n); if(mn) {temp=n; n=m; m=temp; //把大的整数放在n中,小的整数放在m中 } p=m*n; //先将n和m的乘积保存在p中,以便求最小公倍数时用 while(m!=0) { r=n%m;//求n和m的最大公约数 n=m; m=r; } printf(它们的最大公约数为:%d\n,n); printf(它们的最小公倍数为:%d\n,p/n); } 作者:rickone 发表时间:2006-4-2 13:20:00  第5楼 求两个数的最大公约数: int euc_gcd(int a,int b) { /*if(a%b==0)return b; */ if(b==0)return a; return euc_gcd(b,a%b); } 非递归形式: int euc_gcd(int a,int b) { int r=a%b; while(r0) { a=b; b=r; r=a%b; } return b; } 算法:--(转/article.asp?id=48) 欧几里德算法又称辗转相除法,我们将两个不全为0的非负整数m和n的最大公约数记为gcd(m,n),代表能

文档评论(0)

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

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

1亿VIP精品文档

相关文档