解析:
排序,然后每次取首尾的数字相乘,如果存在不同或者,最后答案分解因数不为序列中的数字,则为-1;否则即为答案
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=400;
int n,a[N];
void solve(){
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
sort(a+1,a+n+1);
deque<int>q;
for(int i=1;i<=n;i++) q.push_back(a[i]);
int p=-1,f=1;
while(q.size()){
int x=q.front();
q.pop_front();
int k;
if(q.size()==0) k=x*x;
else{
int y=q.back();
q.pop_back();
k=x*y;
}
if(p!=-1&&p!=k){
puts("-1");
return;
}
p=k;
}
int cnt=0;
for(int i=1;i<=p/i;i++){
if(p%i==0){
cnt++;
if(p/i!=i) cnt++;
}
}
if(cnt!=n+2){
puts("-1");
return;
}
printf("%lld\n",p);
}
signed main(){
int t=1;
scanf("%lld",&t);
while(t--) solve();
return 0;
}