两个正整数最大公约数c语言,C语言求两个正整数的最小公倍数和最大公约数,c语言编程求两个正整数的最大公约数和最小公倍数!...

这篇博客介绍了如何使用C语言来求解两个正整数的最大公约数(GCD)和最小公倍数(LCM)。通过欧几里得算法辗转相除法求最大公约数,并利用最大公约数与最小公倍数的关系计算最小公倍数。博客中还给出了多个C语言实现的示例代码,包括穷举法、欧几里得算法、递归算法等,适用于不同的效率需求。同时,讨论了计算多个数的最小公倍数的算法。
摘要由CSDN通过智能技术生成

导航:网站首页 >

C语言求两个正整数的最小公倍数和最大公约数,c语言编程求两个正整数的最大公约数和最小公倍数!

C语言求两个正整数的最小公倍数和最大公约数,c语言编程求两个正整数的最大公约数和最小公倍数!

匿名网友:

Q1、用欧几里德算法辗转相除法求两个数的最大公约数的步骤如下:先用小的一个数除大的一个数,得第一个余数;再用第一个余数除小的一个数,得第二个余数;又用第二个余数除第一个余数,得第三个余数;这样逐次用后一个数去除前一个余数,直到余数是0为止。

那么,最后一个除数就是所求的最大公约数如果最后的除数是1,那么原来的两个数是互质数。

例如求1515和600的最大公约数,第一次:用600除1515,商2余315;第二次:用315除600,商1余285;第三次:用285除315,商1余30;第四次:用30除285,商9余15;第五次:用15除30,商2余0。

1515和600的最大公约数是15。

Q2、错误,两个数的最大公倍数是无穷大应当是两个正整数的最小公倍数=两个数的乘积÷两个数的最大公约数由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。

这就是说,求两个数的最小公倍数,可以先求出两个数的最大公约数,再用这两个数的最大公约数去除这两个数的积,所得的商就是两个数的最小公倍数。

例 求105和42的最小公倍数。

因为105和42的最大公约数是21,105和42的积是4410,4410÷21=210,所以,105和42的最小公倍数是210。

Q3、原理:三个数的最小公倍数,取公有的质因数时,除了取三个数公有的质因数外,还要取出其中两个数公有的质因数作除数,而把另一个数移下来。

三个数公有的质因数只要取一个,两个数公有的质因数也只要取一个。

这样才能保证所取的全部质因数的乘积是三个数的最小公倍数。

算法:对于3个数A,B,C,最小公倍数=A*B*C/最小公约数的平方 对于对小公约数,可以采用两次辗转相除法 先求A,B的最小公约数D 再求出C与D的最小公约数E 那么E就是这三个数的最小公约数 A*B*C/E/E就是三个数的最小公倍数Q4、本答案绝大部分选自九年义务教育教材修订六年制教材 教师教学用书 第十册 人民教育出版社地址:http://www.pep.com.cn/6jxys10/index.htm若有问题请自行翻阅

匿名网友:

main() { int p,r,n,m,temp; printf("Please enter 2 numbers n,m:"); scanf("%d,%d",&n,&m);//输入两个正整数. if(n那么,最后一个除数就是所求的最大公约数如果最后的除数是1,那么原来的两个数是互质数。

例如求1515和600的最大公约数,第一次:用600除1515,商2余315;第二次:用315除600,商1余285;第三次:用285除315,商1余30;第四次:用30除285,商9余15;第五次:用15除30,商2余0。

1515和600的最大公约数是15。

两个正整数的最小公倍数=两个数的乘积÷两个数的最大公约数由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。

这就是说,求两个数的最小公倍数,可以先求出两个数的最大公约数,再用这两个数的最大公约数去除这两个数的积,所得的商就是两个数的最小公倍数。

例 求105和42的最小公倍数。

因为105和42的最大公约数是21,105和42的积是4410,4410÷21=210,所以,105和42的最小公倍数是210。

...

匿名网友:

main() { int p,r,n,m,temp; printf("Please enter 2 numbers n,m:"); scanf("%d,%d",&n,&m);//输入两个正整数. if(n{temp=n; n=m; m=temp; } p=n*m;//P是原来两个数n,m的乘积. while(m!=0)//求两个数n,m的最大公约数. { r=n%m; n=m; m=r; } printf("Its MAXGongYueShu:%d\n",n);//打印最大公约数. printf("Its MINGongBeiShu:%d\n",p/n);打印最小公倍数.}

匿名网友:

#include "stdio.h" int main(){{int a,b,temp,max=1,min;printf"输入两个整数\n";scanf("%d%d",&a,&b);if(a>b){temp=a;a=b;b=temp;for(i=1;i{if(a%i==0&&b%i==0){if(max}}printf"最大公约数是%d",max;min=a*b;for(i=b;i{if(i%a==0&&i%b==0){if(min>i)min=i;}}printf"最小公倍数是%d",min;return 0;} 上面有点小问题#include "stdio.h"int main(){ int a,b,temp,max=1,min,i;printf"输入两个整数\n";scanf("%d%d",&a,&b);if(a>b){temp=a;a=b;b=temp;}for(i=1;iif(a%i==0&&b%i==0){if(maxmax=i;}printf"最大公约数是%d",max;min=a*b;for(i=b;i{if(i%a==0&&i%b==0){if(min>i)min=i;}}printf"最小公倍数是%d",min; return 0;}

匿名网友:

http://baike.baidu.com/view/255668.htm辗转相除法求最大公约数求最大公约数还有更相减损法http://baike.baidu.com/view/1340422.htmp=n*m,循环结束后n等于n和m的最大公约数,p除以n等于最小公倍数 因为两个数相乘等于最大公约数乘以最小公倍数定理

匿名网友:

#include <stdio.h> int gcd(int x,int y) { return y==0?x:gcd(y,x%y); } int lcd(int a,int x,int y) { return(x*y/a); } main() { int x,y; scanf("%d%d",&x,&y); printf"最大公约数是%d\n",gcd(x,y)); printf"最小共倍数是%d\n",lcd(gcd(x,y),x,y)); }

匿名网友:

参考代码: #include int main() { int a, b, num1, num2, temp; printf"输入两个正整数: "; scanf("%d%d", &num1, &num2); if(num1 > num2) { temp = num1; num1 = num2; num2 = temp; } a = num1; b = num2; while(b != 0)/*利用辗除法,直到b为0为止*/ { temp = a % b; a = b; b = temp; } printf"公约数:%d\n", a; printf"公倍数:%d\n", num1 * num2 / a; return 0; }

匿名网友:

#include int main(){int a,b,i,min,max; //a、b存储读入的两个正整数scanf("%d%d",&a,&b);max = 1;for(i=2;i{if(a%i==0 && b%i==0)max = i;}min = a*b;for(i=a*b-1;i>=a;i--){if(i%a==0 && i%b==0)min = i;}printf("%d\t%d\n",max,min); //先后输出最大公因数和最小公倍数return 0;}这个算法适合输入比较小的情况,不是很高效。

匿名网友:

#include #include int exhaustion(int a, int b) //采用穷举法计算最大公约数{int t = a;if(bt = b;for(; t>0; t--){if(a%t==0 && b%t==0)break;}return t;}int Euclid(int a, int b) //采用欧几里得算法求最大公约数{int t;while(b!=0){t = b;b = a % b;a = t;}return a;}int rec_gcd(int a, int b) //采用递归算法求最大公约数{return b==0 ? a : rec_gcd(b, a%b);}int lcm_fun(int a, int b, int gcd) //求两个数的最小公倍数{int t = a * b / gcd;return t;}int main(){int x, y;int gcd, lcm;printf"请输入两个数并回车,中间以空格隔开:\n";scanf("%d %d", &x, &y);gcd = exhaustion(x, y);printf"采用穷举法计算的最大公约数为:%d\n", gcd;gcd = Euclid(x, y);printf"采用欧几里德算法计算的最大公约数为:%d\n", gcd;gcd = rec_gcd(x, y);printf"采用递归算法计算的最大公约数为:%d\n", gcd;lcm = lcm_fun(x, y, gcd);printf"两数的最小公倍数为:%d\n", lcm;return 0;}

匿名网友:

#include "stdio.h" int main(){{ int a,b,temp,max=1,min; printf"输入两个整数\n"; scanf("%d%d",&a,&b); if(a>b) {temp=a;a=b;b=temp; for(i=1;ii)min=i; } } printf"最小公倍数是%d",min; return 0; } 上面有点小问题 #include "stdio.h" int main(){ int a,b,temp,max=1,min,i; printf"输入两个整数\n"; scanf("%d%d",&a,&b); if(a>b) {temp=a;a=b;b=temp;} for(i=1;ii)min=i; } } printf"最小公倍数是%d",min; return 0; }...

问题推荐

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值