题意:给出一个数n,下面n个数,求最小的x,使x的所有约数除了1和x外都在n的数组里,若没有x,输出-1。
思路:若存在x,则最小的约数乘以最大的约数就是最小的x,然后判断一下x是否符合题意即可,傻逼题,可能最近做题少了,题意读错了
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll t, n, a[1000], ans;
int cal(ll x) {
int res = 0;
for(ll i = 2; i * i <= x; i++) {
if(x % i == 0)
res += 2;
if(i * i == x)
res--;
}
return res;
}
int main() {
cin >> t;
while(t--) {
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i];
sort(a + 1, a + n + 1);
ans = a[1] * a[n];
if(cal(ans) != n)
ans = -1;
else
for(int i = 1; i <= n; i++) {
if(ans % a[i]) {
ans = -1;
break;
}
}
cout << ans << endl;
}
return 0;
}