没读懂题就开始写的后果。
题目中给出的因子是所有因子啊啊啊啊啊!如果X存在,一定是最小因子与最大因子之积,因为如果 k 是 x 的因子,则 x/k 也是x的因子。。
然后就判断一下其他的积是不是,然后判断一下是否包含全部因子即可。
#define int ll
signed main()
{
int t;cin>>t;
while(t--)
{
int n;cin>>n;
vector<ll> v(n); cin>>v;//用宏定义 vi ,导致define int ll 不起作用,溢出错误
sort(all(v));
ll ans= v[0]*v[n-1];
int l = 1 ,r =n-2;
while(l<=r)//l<=r 记得还有 i * i的情况
{
if(v[l]*v[r]!=ans)
{
ans=-1; break;
}
++l,--r;
}
if(ans==-1)
{
cout<<ans<<endl;
continue;
}
map<int,int>mp;
rep(i,n) mp[v[i]] = 1;
for(int i = 2;i*i<=ans;++i)
{
if(ans%i) continue;
if(mp[i]==0||mp[ans/i]==0)
{
ans=-1;
break;
}
}
cout<<ans<<endl;
}
return 0;
}