题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
最大公约数(Greatest Common Divisor, GCD)是指两个或多个整数共有约数中最大的一个。例如,12和30的公约数有1、2、3、6,其中6就是12和30的最大公约数。
(1)最小公倍数=两个数的积/最大公约数
(2)求最大公约数用辗转相除法(又名欧几里德算法)
思路:通过两个函数分别计算这两个数字的最大公约数和最小公倍数。
12345678910111213141516171819202122232425262728293031323334 | int GCD(int m,int n)//求最大公约数{ if (n>m)//始终让m里面的数字是大的 { int temp; temp = n; n = m; m = temp; } //开始辗转相除 int remainder = m % n;//余数 while (remainder) { m = n; n = remainder; remainder = m % n; } return n;} int LCM(int gcd,int m,int n){ return (m*n/gcd);} int main() { int m,n; printf("请输入两个正整数m和n,求其最大公约数和最小公倍数:->"); scanf("%d,%d",&m,&n); int gcd = GCD(m,n); int lcm = LCM(gcd,m,n); printf("最大公约数是:%d\n",gcd); printf("最小公倍数是:%d",lcm); return 0;} |