最大公约数&最小公倍数
/**
* 计算两个自然数的最大公约数(GCD)
* @param a 第一个自然数
* @param b 第二个自然数
* @return 最大公约数(若输入非法返回 -1)
*/
int gcd(int a, int b) {
// 处理非法输入(非自然数)
if (a <= 0 || b <= 0) {
return -1;
}
// 辗转相除法核心逻辑
while (b != 0) {
int temp = a % b;
a = b;
b = temp;
}
return a;
}
扩展:最小公倍数
最小公倍数可以通过最大公约数计算得到:lcm(a, b) = |a * b| / gcd(a, b)
#include <stdio.h>
// 辗转相除法 - 迭代实现
int gcd(int a, int b) {
// 处理非法输入(非自然数)
if (a <= 0 || b <= 0) {
return -1;
}
// 辗转相除法核心逻辑
while (b != 0) {
int temp = a % b;
a = b;
b = temp;
}
return a;
}
// 最小公倍数计算
int lcm(int a, int b) {
return a / gcd(a, b) * b;
}
int main() {
int num1, num2;
printf("请输入两个正整数: ");
scanf("%d %d", &num1, &num2);
printf("最大公约数(GCD)是: %d\n", gcd(num1, num2));
printf("最小公倍数(LCM)是: %d\n", lcm(num1, num2));
return 0;
}
