题目描述
一个集合,任取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
AC代码
#include<stdio.h>
#define ll long long
ll gcd(ll a,ll b){ll t;while(a%b!=0){t=a%b;a=b;b=t;}return b;
}
ll lcm(ll a,ll b){return a*b/gcd(a,b);
}
int main(){int T;scanf("%d",&T);while(T--){int n,i,j,k;scanf("%d",&n);ll a[55]={};for(i=0;i<n;i++){scanf("%I64d",&a[i]);} ll min=lcm(lcm(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++){ll t=lcm(lcm(a[i],a[j]),a[k]);if(t<=min)min=t;}}}printf("%I64d\n",min);}
}
遇到比较多个数值时,可以采用两两相比的方法。