用C语言搞定最大公约数和最小公倍数,超简单!


在C语言中,计算两个数的最大公约数(GCD)和最小公倍数(LCM)是非常基础且重要的操作。我们可以使用欧几里得算法来高效地计算最大公约数,然后根据最大公约数来计算最小公倍数。

首先,我们来看如何用C语言实现最大公约数。欧几里得算法的核心思想是:两个正整数a和b(a > b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。这个算法可以递归地实现。以下是一个简单的C语言程序,用于计算两个数的最大公约数:

```c

include

// 函数声明

int gcd(int a, int b);

int main() {

int num1, num2, result;

// 输入两个数

printf("Enter two positive integers: ");

scanf("%d %d", &num1, &num2);

// 调用函数计算最大公约数

result = gcd(num1, num2);

// 输出结果

printf("GCD of %d and %d is %d\n", num1, num2, result);

return 0;

}

// 使用欧几里得算法计算最大公约数

int gcd(int a, int b) {

if (b == 0) {

return a;

} else {

return gcd(b, a % b);

}

}

```

接下来,我们来看如何计算最小公倍数。最小公倍数可以通过两个数的乘积除以它们的最大公约数来计算。以下是一个完整的C语言程序,用于计算两个数的最小公倍数:

```c

include

// 函数声明

int gcd(int a, int b);

int lcm(int a, int b);

int main() {

int num1, num2, result;

// 输入两个数

printf("Enter two positive integers: ");

scanf("%d %d", &num1, &num2);

// 调用函数计算最小公倍数

result = lcm(num1, num2);

// 输出结果

printf("LCM of %d and %d is %d\n", num1, num2, result);

return 0;

}

// 使用欧几里得算法计算最大公约数

int gcd(int a, int b) {

if (b == 0) {

return a;

} else {

return gcd(b, a % b);

}

}

// 计算最小公倍数

int lcm(int a, int b) {

return (a b) / gcd(a, b);

}

```

通过这两个程序,我们可以轻松地计算任意两个正整数的最大公约数和最小公倍数。欧几里得算法的时间复杂度很低,因此这些程序在处理大数时也非常高效。希望这些示例对你有所帮助!