最大公约数&最小公倍数

/**
 * 计算两个自然数的最大公约数(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-22 09:42
门头沟学院 Java
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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