最大公约数&最小公倍数

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

全部评论

相关推荐

09-17 19:25
已编辑
太原理工大学 游戏测试
叁六玖:公司名发我,我要这个HR带我打瓦
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务