Least Common Multiple(HDU 1019 GCD(最大公約數) LCD(最小公倍數))

題目鏈接:

http://acm.hdu.edu.cn/showproblem.php?pid=1019

題面:

在這裏插入圖片描述

翻譯:

問題描述
一組正整數的最小公倍數(LCM)是一組正整數中可以被所有數整除的最小的正整數。例如,5、7和15的LCM是105。

輸入
輸入將由多個問題實例組成。輸入的第一行將包含一個整數,該整數指示問題實例的數量。每個實例將由m n1 n2 n3…其中m是集合中整數的個數,n1…nm是整數。所有整數都是正的,並且位於一個32位整數的範圍內。

輸出
對於每個問題實例,輸出一行包含相應的LCM。所有結果的範圍都是32位整數。

樣例輸入
2
3 5 7 15
6 4 10296 936 1287 792 1

樣例輸出
105
10296

思路:

這道題目的就是問你求n個數字的最小公倍數,那我們可以先求兩個數的最小公倍數然後再把這兩個數的最小公倍數與另一個數字求最小公倍數,依次求下去,最後就可以求n個數字的最小公倍數,這裏我們需要了解的就是最小公倍數的求法,求最小公倍數我們就需要把最大公約數求出來,最大公約數的求法就是常見的輾轉相除法,這裏就不展開講了,求最大公約數和最小公倍數的函數在下面,可以參考參考,作爲模板。

參考代碼:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<vector>
#include<list>
#include<stacK>
#include<queue>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
int gcd(int a,int b)//求a和b的最大公約數
{
    return b==0?a:gcd(b,a%b);
}
int lcd(int a,int b)//求a和b的最小公倍數
{
    return a/gcd(a,b)*b;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,a,b;
        cin>>n;
        cin>>a;//先輸入一個數字
        for(int i=1;i<n;i++)
        {
            cin>>b;
            a=lcd(a,b);//然後每次都是前兩個數字的最小公倍數與第三個數字的找最小公倍數
        }
        cout<<a<<endl;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章