标题
本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:
511 292
输出样例:
73 2044
代码 :
#include <stdio.h>
int main() {
int x, y, m, n;
// 从标准输入读取两个整数 x 和 y
scanf("%d %d", &x, &y);
// 保留原始输入的值,因为 x 和 y 会在后面的算法中改变
m = x;
n = y;
// 使用辗转相减法(欧几里得算法)计算 x 和 y 的最大公约数(GCD)
while (x != y) {
if (x > y) {
// 如果 x 大于 y,则用 x 减去 y
x = x - y;
} else {
// 如果 y 大于 x,则用 y 减去 x
y = y - x;
}
}
// 打印结果,第一个输出最大公约数(GCD),第二个输出最小公倍数(LCM)
// 最小公倍数(LCM)可以通过 (m * n) / GCD 计算得到,因为 x 和 y 最终会相等为 GCD
printf("%d %d", x, (m * n) / x);
return 0; // 返回0表示程序正常结束
}