一个集合,任取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);
}
}
遇到比较多个数值时,可以采用两两相比的方法。