优秀的编程知识分享平台

网站首页 > 技术文章 正文

C语言求两个数的最大公约数,最小公倍数

nanyue 2025-04-24 06:32:04 技术文章 5 ℃

在C语言中,可以使用 辗转相除法(欧几里得算法) 来求两个数的最大公约数(GCD),然后利用最大公约数来计算最小公倍数(LCM)。

最大公约数(GCD)

辗转相除法 的基本思想是:

  1. 用较大的数除以较小的数,得到余数。
  2. 将较小的数和余数作为新的两个数,重复上述步骤,直到余数为0。
  3. 最后的非零余数就是最大公约数。

最小公倍数(LCM)

最小公倍数可以通过以下公式计算:

代码实现

以下是完整的C语言代码,实现求两个数的最大公约数和最小公倍数:

#include <stdio.h>

// 计算最大公约数(GCD)
int gcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

// 计算最小公倍数(LCM)
int lcm(int a, int b) {
    return (a * b) / gcd(a, b);
}

int main() {
    int num1, num2;

    // 输入两个数
    printf("请输入两个正整数: ");
    scanf("%d %d", &num1, &num2);

    // 计算最大公约数和最小公倍数
    int gcd_result = gcd(num1, num2);
    int lcm_result = lcm(num1, num2);

    // 输出结果
    printf("最大公约数(GCD): %d\n", gcd_result);
    printf("最小公倍数(LCM): %d\n", lcm_result);

    return 0;
}

代码说明

  1. gcd() 函数

使用辗转相除法计算两个数的最大公约数。

通过循环不断更新两个数的值,直到余数为0。

  1. lcm() 函数

利用公式

计算最小公倍数。

调用 gcd() 函数获取最大公约数。

  1. 主函数 main()

输入两个正整数。

调用 gcd() 和 lcm() 函数计算结果,并输出。

示例运行

输入:

请输入两个正整数: 12 18

输出:

最大公约数(GCD): 6
最小公倍数(LCM): 36

输入:

请输入两个正整数: 21 56

输出:

最大公约数(GCD): 7
最小公倍数(LCM): 168

注意事项

  1. 输入验证

在实际应用中,需要对输入的数进行验证,确保其为正整数。

  1. 负数处理

如果输入的数为负数,可以取其绝对值进行计算。

  1. 性能

辗转相除法的时间复杂度为 O(log(min(a,b)),性能非常高。

扩展功能

如果需要支持多个数的最大公约数和最小公倍数,可以扩展代码。例如:

计算多个数的最大公约数

int gcd_multiple(int arr[], int n) {
    int result = arr[0];
    for (int i = 1; i < n; i++) {
        result = gcd(result, arr[i]);
    }
    return result;
}

例如计算多个数的最小公倍数

int lcm_multiple(int arr[], int n) {
    int result = arr[0];
    for (int i = 1; i < n; i++) {
        result = lcm(result, arr[i]);
    }
    return result;
}

示例调用

int numbers[] = {12, 18, 24};
int n = sizeof(numbers) / sizeof(numbers[0]);

int gcd_result = gcd_multiple(numbers, n);
int lcm_result = lcm_multiple(numbers, n);

printf("多个数的最大公约数(GCD): %d\n", gcd_result);
printf("多个数的最小公倍数(LCM): %d\n", lcm_result);

Tags:

最近发表
标签列表