正整数a和b的最小公倍数是指a和b的所有公倍数中最小的那个公倍数,例如4和6的最小公倍数12,3和 9的最小公倍数为9。
最小公倍数的求解在最大公约数的基础上进行,当得到a和b的最大公约数d的时候,可以马上得到a和b的最小公倍数是ab/d。
怎么理解呢?a和b的最大公约数就是集合a和集合b的交集,而最小公倍数为集合a和集合b的并集。要得到并集,由于ab会使公因子多计算一次,因此需要除掉一次公因子。
由于ab在实际计算的时候可能出现溢出的情况,因此更恰当的写法是 a/b*d。由于d是a和b的最大公约数,因此a/d一定可以整除。
多点测试:
样例输入
2
2 3 5
3 4 6 12
样例输出
15
12
程序:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <cstring>
#include <sstream>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
int gcd(int a,int b)
{
return !b?a:gcd(b,a%b);
}
int lcm(int a,int b)
{
return a/gcd(a,b)*b;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int m;
cin>>m;
int a,b;
cin>>a;
for(int j=0;j<m-1;j++)
{
cin>>b;
a=lcm(a,b);
}
cout<<a<<endl;
}
return 0;
}