c语言,求两个非负整数的最大公约数和最小公倍数

c语言,求两个非负整数的最大公约数和最小公倍数

最大公约数:枚举法,辗转相除法;最小公倍数:两数乘积除以最大公约数即可。

#include<stdio.h>

#include<math.h>

int fun_gy(int,int);  //声明最大公约数函数

int fun_gb(int,int);  //声明最小公倍数函数

main()

{

int a,b,gy,gb;

printf("输入两个整数:\n");

scanf("%d%d",&a,&b);

gy=fun_gy(a,b);   //调用最大公约数函数

gb=fun_gb(a,b);  //调用最小公倍数函数

printf("最大公约数是:%d\n最小公倍数是:%d\n",gy,gb);

if(x%i==0&&y%i==0)

break;

两个整数的最大公约数

* 两数各分解质因数,然后取出同样有的质因数乘起来

*辗转相除法(扩展版)

和最小公倍数(lcm)的关系:

gcd(a, b) * lcm(a, b) = ab

a与b有最大公约数,

两个整数的最大公因子可用于计算两数的最小公倍数,或分数化简成最简分数

两个整数的最大公因子和最小公倍数中存在分配律:

* gcd(a, lcm(b, c)) = lcm(gcd(a, b), gcd(a, c))

* lcm(a, gcd(b, c)) = gcd(lcm(a, b), lcm(a, c))

在坐标里,将点(0, 0)和(a, b)连起来,通过整数坐标的点的数目(除了(0, 0)一点之外)就是gcd(a, b)。

以上内容参考:百度百科-最大公约数

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-19
main() { int p,r,n,m,temp; printf("Please enter 2 numbers n,m:"); scanf("%d,%d",&n,&m);//输入两个正整数. if(n<m)//把大数放在n中,把小数放在m中. {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);打印最小公倍数. 基本原理如下: 用欧几里德算法(辗转相除法)求两个数的最大公约数的步骤如下: 先用小的一个数除大的一个数,得第一个余数; 再用第一个余数除小的一个数,得第二个余数; 又用第二个余数除第一个余数,得第三个余数; 这样逐次用后一个数去除前一个余数,直到余数是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。 两个正整数的最小公倍数=两个数的乘积÷两个数的最大公约数 由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。这就是说,求两个数的最小公倍数,可以先求出两个数的最大公约数,再用这两个数的最大公约数去除这两个数的积,所得的商就是两个数的最小公倍数。 例 求105和42的最小公倍数。 因为105和42的最大公约数是21, 105和42的积是4410,4410÷21=210, 所以,105和42的最小公倍数是210。本回答被网友采纳
第2个回答  2020-04-05
最大公约数:枚举法,辗转相除法
最小公倍数:两数乘积除以最大公约数即可。
相似回答