最大公约数&最小公倍数
/** * 计算两个自然数的最大公约数(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; }