曾经沧海难为水,除却巫山不是云。|

Joey-Wang

园龄:4年3个月粉丝:17关注:0

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;
}

本文作者:Joey-Wang

本文链接:https://www.cnblogs.com/joey-wang/p/14541169.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Joey-Wang  阅读(54)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开