- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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),代表能
您可能关注的文档
最近下载
- 数字产业集聚与区域经济韧性——基于省级面板数据的实证分析.pdf VIP
- 职业中学学生职业选择与学习动机研究教学研究课题报告.docx
- PGT25PLUS燃气轮机结构介绍(参考).ppt VIP
- 10.多撇不同向 课件-六年级上册小学书法(苏少版).pptx VIP
- 11一字无二捺 教学课件 六年级上册书法(苏少版).ppt VIP
- 2025年元宇宙产业发展趋势报告:区块链技术基础设施建设创新.docx VIP
- 跨境电商出口跨境电商行业跨境电商出口市场分析与发展趋势报告.docx
- 初中数学教学中推理能力的培养与数学学习策略的关系研究教学研究课题报告.docx
- 跨境电商跨境电商平台跨境电商平台跨境电商平台运营策略研究报告.docx
- 1平正安稳 教学课件 六年级下册书法(苏少版).ppt VIP
文档评论(0)