5.2 最大公约数与最小公倍数

5.2 最大公约数与最小公倍数

http://codeup.hustoj.com/contest.php?cid=100000589

A Least Common Multiple

image-20200713194040922

题目释义

求n个数的最小公倍数。

第一行输入m表示样例数目,接下来m行为各个具体样例;

第二行输入n表示此样例中数字个数,接下来n个为具体数字。需求这n个数的最小公倍数。

题目解析

求n个数的最小公倍数——前两个数a、b求最小公倍数c,再将c与第三个数d求最小公倍数,······

Small Tips:为了代码书写方便,且避免只有一个数的情况,可预存一个数1,任何数与1的最小公倍数都是这个数本身。

⚠️n可能为1。此时最小公倍数即输入的那个唯一的数。

代码1(自己写的)

#include <cstdio>

int gcd(int a, int b) {
    if (b == 0) return a;
    return gcd(b, a % b);
}

int main() {
    int m, n;
    int a, b;
    scanf("%d", &m);
    while (m--) {
        scanf("%d", &n);
        if (n == 1) {
            scanf("%d", &a);
            printf("%d\n", a);
        } else {
            scanf("%d %d", &a, &b);
            a = a / gcd(a, b) * b;
            for (int i = 3; i <= n; i++) {
                scanf("%d", &b);
                a = a / gcd(a, b) * b;
            }
            printf("%d\n", a);
        }
    }
    return 0;
}

代码2(根据tips)

#include <cstdio>

int gcd(int a, int b) {
    if (b == 0) return a;
    return gcd(b, a % b);
}

int main() {
    int m, n;
    int a, b;
    scanf("%d", &m);
    while (m--) {
        scanf("%d", &n);
        a = 1;
        for (int i = 0; i < n; i++) {
            scanf("%d", &b);
            a = a / gcd(a, b) * b;
        }
        printf("%d\n",a);
    }
    return 0;
}
posted @ 2021-03-16 02:46  Joey-Wang  阅读(60)  评论(0)    收藏  举报