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
", ans);
        else    puts("-1");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/lifehappiness/p/12802703.html