题目:传送门
思路: 给出了除了它本身 和 1 的所有因子,那么我们只要凑成对子然后看他们乘积是否相同即可 , 算出的 ans 要判断他的因子个数是否与题目所给的因子个数相同,如果不同则输出“-1” (例如 1 4 , 2 4 12 这种情况)
参考代码:
long long a[310];
int n;
bool is_ok(long long x) {
int len = 0;
long long limit = sqrt(x);
for(long long i=2;i<=limit;i++) {
if(x%i == 0) {
len++;
if(x/i != i ) len++;
}
}
return len==n;
}
int main() {
int t;
cin>>t;
while(t--) {
cin>>n;
for(int i=0;i<n;i++) {
cin>>a[i];
}
sort(a,a+n);
long long ans = -1;
for(int i=0;i<=n/2;i++) {
if(ans == -1) {
ans = a[i]*a[n-i-1];
}
else {
if(ans != a[i]*a[n-1-i]) {
ans = -1;
break;
}
}
}
cout<< ( (ans==-1||!is_ok(ans))? -1:ans)<<endl;
}
return 0;
}