C语言求两个整数的最大公约数(GCD)和最小公倍数(LCM)

方法

最大公约数(GCD):
使用欧几里得算法(Euclidean algorithm)求解最大公约数。欧几里得算法的基本思想是通过连续的除法操作,将两个数的较大数不断取余替换为新的除数,直到余数为零。此时,较小的数即为最大公约数。
例如,假设我们要求解整数a和b的最大公约数,可以按照以下步骤进行:
将a除以b,得到商q1和余数r1。
如果r1为0,则b即为最大公约数。
如果r1不为0,则用b除以r1,得到商q2和余数r2。
重复上述步骤,直到余数为0。最后的除数即为最大公约数。

最小公倍数(LCM):
最小公倍数可以通过最大公约数求解。根据以下公式计算最小公倍数:
LCM(a, b) = (a * b) / GCD(a, b)
也就是说,最小公倍数等于两个数的乘积除以它们的最大公约数。

举个栗子

假设我们要计算整数12和18的最小公倍数(LCM)。

首先,我们需要求解它们的最大公约数(GCD)。

使用欧几里得算法,我们可以按照以下步骤计算最大公约数:

将较大的数除以较小的数,得到商和余数:
18 ÷ 12 = 1 余 6

然后,再用上一步的除数除以余数,得到新的商和余数:
12 ÷ 6 = 2 余 0

余数为0,所以最大公约数为上一步的除数,即6。

现在我们已经求得最大公约数为6。接下来,我们可以使用以下公式来计算最小公倍数:

LCM(12, 18) = (12 × 18) ÷ GCD(12, 18)

将最大公约数代入公式:

LCM(12, 18) = (12 × 18) ÷ 6 = 36

因此,整数12和18的最小公倍数为36。

综上所述,通过计算最大公约数,并利用最大公约数求得最小公倍数的公式,我们可以得到最小公倍数。

代码

#include <stdio.h>

// 函数声明
int gcd(int a, int b);
int lcm(int a, int b);

int main() {
    int a, b;
    
    printf("请输入两个整数:\n");
    scanf("%d %d", &a, &b);
    
    int gcdResult = gcd(a, b);
    int lcmResult = lcm(a, b);
    
    printf("最大公约数(GCD):%d\n", gcdResult);
    printf("最小公倍数(LCM):%d\n", lcmResult);
    
    return 0;
}

// 函数定义:求最大公约数(GCD)
int gcd(int a, int b) {
    if (b == 0) {
        return a;
    } else {
        return gcd(b, a % b);
    }
}

// 函数定义:求最小公倍数(LCM)
int lcm(int a, int b) {
    int gcdResult = gcd(a, b);
    int lcmResult = (a * b) / gcdResult;
    return lcmResult;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值