Almost All Divisors
Almost All Divisors
思路
这题稍微简单,直接模拟,我们知道 \(x\) 一定是排序后的 \(a[1] * a[n]\)
所以直接排序,然后再找一遍 \(x\) 的因子,最后比对这两个因子数组是不是一样的,一样就输出 \(x\),否者就输出 \(-1\)。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3 + 10;
ll a[N], b[N];
int n, m;
int main() {
// freopen("in.txt", "r", stdin);
int t;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%lld", &a[i]);
sort(a, a + n);
ll ans = a[0] * a[n - 1];
m = 0;
for(int i = 2; 1ll * i * i <= ans; i++) {
if(ans % i == 0) {
b[m++] = i;
if(ans / i != i)
b[m++] = ans / i;
}
}
if(n != m) {
puts("-1");
continue;
}
sort(b, b + m);
int flag = 1;
for(int i = 0; i < n; i++)
if(a[i] != b[i]) {
flag = 0;
break;
}
if(flag) printf("%lld\n", ans);
else puts("-1");
}
return 0;
}