7-26 最大公约数和最小公倍数

一、题目要求

本题要求两个给定正整数的最大公约数和最小公倍数。

输入格式:

输入在一行中给出两个正整数M和N(≤1000)。

输出格式:

在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。

输入样例:

511 292

输出样例:

73 2044

二、代码

1.枚举法

#include <stdio.h>
int main() {
    int a, b, c;
    scanf("%d %d", &a, &b);
    for (int i = 1; i <= a&&i<=b; i++) {
        if (a % i == 0 && b % i == 0) {
            c = i;
        }
    }
    printf("%d %d", c, a * b / c);
    return 0;
}

2.辗转相除法

利用循环:

#include <stdio.h>
int main() {
    int a, b;
    scanf("%d %d", &a, &b);
    int m = a * b;
    while (b != 0) {
        int t = a % b;
        a = b;
        b = t;
    }
    printf("%d %d", a,m/a);
    return 0;
}

 利用函数:

#include <stdio.h>
int gcd(int a, int b);
int main() {
    int a, b;
    scanf("%d %d", &a, &b);

    printf("%d %d", gcd(a, b),a*b/gcd(a, b));
    return 0;
}
int gcd(int a, int b) {
    int m;
    if (a < b) {
        int t = a;
        a = b;
        b = t;
    }
    if (a % b == 0)m = b;
    else m = gcd(b, a % b);
    return m;
}

补充:欧几里得算法/辗转相除法(引自百度百科)


版权声明:本文为m0_66036805原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。