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,算法照样正常运行,不用交换
五、极简记忆口诀
最大公约数:大数除小数,余数除除数,直到余为零
最小公倍数:两数相乘,除以最大公约数
浙公网安备 33010602011771号