输入两个不同正整数,m和n,求两者最大公约数和最小公倍数。
最大公约数(辗转相除法)
1.大数 ÷ 小数,余数= 0,则小数为两者的最大公约数
2.大数 ÷ 小数,余数 ≠ 0,让小数成为大数,余数成为小数,再次计算大数 ÷ 小数,
如果余数 ≠ 0,继续重复以上步骤,直到余数 = 0,此时的小数就为最大公约数
最小公倍数
最小公倍数= (大数 × 小数)÷ 最大公约数
#include <stdio.h>
// 函数:MaxAndMin
// 功能:比较两个整数指针所指向的值,如果 max 小于等于 min,则交换它们的值。
void MaxAndMin(int *max, int *min) {
if (*max <= *min) {
int temp = *max; // 使用临时变量 temp 存储 max 的值
*max = *min; // 将 min 的值赋给 max
*min = temp; // 将 temp(即原来的 max 值)赋给 min
}
}
int main() {
int max, min, product;
// 提示用户输入两个正整数
printf("Please enter two positive integers:\n");
scanf("%d%d", &max, &min);
// 调用 MaxAndMin 函数,确保 max >= min
MaxAndMin(&max, &min);
printf("max = %d, min = %d\n", max, min);
// 计算两个数的乘积,用于之后计算最小公倍数
product = max * min;
// 使用辗转相除法(欧几里得算法)计算最大公约数
// 循环条件:当 max 不能被 min 整除时继续循环
for (int temp; (max % min) != 0; ) {
temp = max; // 保存当前的 max 值
max = min; // 更新 max 为 min 的值
min = temp % max; // 更新 min 为 max 对 min 取余的值
}
// 当循环结束时,余数为 0,min 是最大公约数
printf("最大公约数是 : %d\n", min);
// 最小公倍数 = 两数乘积 / 最大公约数
printf("最小公倍数是 : %d\n", product / min);
return 0;
}