#include <stdio.h>
//
// 最大公约数(Greatest Common Divisor)
// 辗转相除法:
// 分别用m, n, r表示被除数, 除数, 余数.
// ①求m/n的余数r。
// ②若r=0, 则n为最大公约数. 若r≠0, 执行第③步.
// ③将n的值放在m中, 将r的值放在n中.
// ④返回重新执行第①步。
//
unsigned long Gcd(unsigned long m, unsigned long n)
{
unsigned long temp;
while (n)
{
temp = n;
n = m % n;
m = temp;
}
return m;
//
// 还有一种递归的算法:
// if (m == 0)
// {
// return n;
// }
// return Gcd(n%m, m);
//
}
//
// 最小公倍数(Lease Common Multiple)
//
unsigned long Lcm(unsigned long m, unsigned long n)
{
return m / Gcd(m, n) * n;
//
// 另外一种方法是:
// unsigned long a;
// for (a = 1; a <= m*n; a++)
// {
// if ((a%m == 0) && (a%n == 0))
// {
// break; // 这里该结束了,找到了最小公倍数。
// }
// }
// return a;
//
}
void main()
{
unsigned long m, n, a;
printf("输入两个数(用空格分隔):");
scanf("%lu%lu", &m, &n);
if ((m < 0) || (n < 0))
{
return;
}
a = Lcm(m, n);
printf("%lu和%lu的最小公倍数是%lu/n", m, n, a);
a = Gcd(m, n);
printf("%lu和%lu的最大公约数是%lu/n", m, n, a);
}