C语言中求最大公约数和最小公倍数的方法

一、最大公约数(GCD)
方法:辗转相除法(欧几里得算法)
c
运行
int gcd(int a, int b) {
while (b != 0) {
int temp = a % b;
a = b;
b = temp;
}
return a;
}
原理
gcd(a, b) = gcd(b, a % b)
直到 b 为 0,a 就是最大公约数

二、最小公倍数(LCM)
公式
lcm(a,b)= a×b/gcd(a,b)

c

int lcm(int a, int b) {
return a / gcd(a, b) * b; // 先除后乘,防止溢出
}

三、完整可运行程序
c

include <stdio.h>

// 最大公约数
int gcd(int a, int b) {
while (b != 0) {
int t = a % b;
a = b;
b = t;
}
return a;
}
// 最小公倍数
int lcm(int a, int b) {
return a / gcd(a, b) * b;
}

int main() {
int a, b;
scanf("%d %d", &a, &b);

printf("最大公约数:%d\n", gcd(a, b));
printf("最小公倍数:%d\n", lcm(a, b));

return 0;
}

四、必须记住的注意事项
1.辗转相除法是最优最简单,不用枚举
2.求最小公倍数时
不要写成 a*b/gcd(...)
要写成 a/gcd(...) * b,防止 int 溢出
3.输入一般默认 a,b>0
4.若 a < b,算法照样正常运行,不用交换

五、极简记忆口诀
最大公约数:大数除小数,余数除除数,直到余为零
最小公倍数:两数相乘,除以最大公约数

posted on 2026-04-18 15:37  谢天佑  阅读(111)  评论(0)    收藏  举报