Almost All Divisors

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;
}
posted @ 2020-04-29 15:57  lifehappiness  阅读(50)  评论(0编辑  收藏  举报