最小公倍数LCM (leastet common mutiple)

Problem Description
The least common multiple (LCM) of a set of positive integers is the smallest positive integer which is divisible by all the numbers in the set. For example, the LCM of 5, 7 and 15 is 105.

最小共同倍数(of一组正数)  is  最小的正数(能被所有成员整除)

LCM(5 7 15) =  105   

因为 105 % 5 == 0 ,105 % 7 == 0, 105 % 15 == 0

 

Input
Input will consist of multiple problem instances. The first line of the input will contain a single integer indicating the number of problem instances.

刚开始是n 例子的个数

Each instance will consist of a single line of the form m n1 n2 n3 … nm where m is the number of integers in the set and n1 … nm are the integers.

m  n1 ...n2...nm

All integers will be positive and lie within the range of a 32-bit integer.

Output
For each problem instance, output a single line containing the corresponding LCM. All results will lie in the range of a 32-bit integer.

Sample Input
2

3 5 7 15

6 4 10296 936 1287 792 1

Sample Output
105

10296

Source
East Central North America 2003, Practice

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <map>
#include <stack>
using namespace std;


//GreatestCommonDivisor 最大公因子
int gcd(int x, int y) {

    if (x < y) {
        swap(x, y);
    }

    if (x % y == 0) {
        return y;
    } else {
        int yu = x % y;
        return gcd(y, yu);
    }
}

//least common mutiple
int lcm(int x, int y) {
    return x * y / gcd(x, y);

}


int main() {

    int n;
    cin >> n;
    while(n--) {
        stack<int> res;
        int m;
        cin >> m;
        while(m--) {
            int t;
            cin >> t;
            res.push(t);
        }
        while (res.size() >= 2) {
            int a = res.top();
            res.pop();
            int b = res.top();
            res.pop();
            int c = lcm(a, b);
            res.push(c);
        }
        int f = res.top();
        cout << f << endl;

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值