题目描述
一个集合,任取3个不同的元素,求其最小公倍数中最小的值是多少?
输入
第一行是样例数T(1≤T≤100)。 每个样例的第一行是一个整数n(3≤n≤50),表示集合元素的个数。 每个样例的第二行是n个整数a1,a2,…,an,1≤ai≤106。
输出
每个样例输出一行。
样例输入
3 5 2 3 5 7 11 5 2 3 5 7 15 6 12 3 2 1 6 4
样例输出
30 15 4
样例解释
第一个样例,最小的公倍数为lcm(2,3,5)=30。
第二个样例,最小的公倍数为lcm(3,5,15)=15。
第一个样例,最小的公倍数为lcm(1,2,4)=4
#include<stdio.h>
long long int a[100];//数据有点大,用longlong
long long int yueshu(long long int a,long long int b)//求最大公约数的函数
{
if(a%b==0)
{
return b;
}
a%=b;
return yueshu(b,a);
}
int main()
{
int T,n,i,j,k;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%lld",&a[i]);
}
long long int t,ans;
ans=a[0]*a[1]*a[2];//先假设所求为前三个数之积
for(i=0;i<n-2;i++)
{
for(j=i+1;j<n-1;j++)
{
for(k=j+1;k<n;k++)
{
t=a[i]*a[j]/yueshu(a[i],a[j]);//先求任意两个数的最小公倍数
if(t*a[k]/yueshu(t,a[k])<ans)//再求其与第三个数的最小公倍数
{
ans=t*a[k]/yueshu(t,a[k]);//与假设的结果作比较
}
// ans= (t*a[k]/yueshu(t,a[k])) < ans ? t*a[k]/yueshu(t,a[k]) :ans;
}
}
}
printf("%lld\n",ans);
}
return 0;
}