Least Common Multiple
题目描述
一个集合,任取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。
思路分析:暴力求解,因为是三个数求gcd,所以需要三重循环来遍历所有组合的可能性
我这里是写了gcd,lcm的函数来解决的最大公约数,最小公倍数
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll gcd(ll a,ll b){
if(b==0) return a;
else return gcd(b,a%b);
}
ll lcm(ll a,ll b){
ll ans;
ans=(a*b)/gcd(a,b);
return ans;
}
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int arr[n+1]={0};//变长数组
int i,j,k;
for(i=1;i<n+1;i++){
cin>>arr[i];
}
ll min=lcm(lcm(arr[1],arr[2]),arr[3]);
for(i=1;i<n-1;i++){
for(j=i+1;j<n;j++){
for(k=j+1;k<=n;k++){
ll temp=lcm(lcm(arr[i],arr[j]),arr[k]);
if(temp<min){
min=temp;
}
}
}
}
cout<<min<<endl;
}
}