蓝桥杯 被污染的支票

题意

给定\(n\)个数 , 判断是否是某个数\(x\)的所有因数

思路

如果是的话 , 那么其中每个因数的因数都该在这\(n\)个数字中 , 且每个数字只出现一次

在是的情况下 , 最小数乘最大数就是\(x\)

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long int
inline int read() {
    int ans = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-')f = -1;
        ch = getchar();
    }
    while (ch <= '9' && ch >= '0') {
        ans = ans * 10 + ch - '0';
        ch = getchar();
    }
    return ans * f;
}
const int N = 1e6+10;
int mp[N];
signed main() {
    int n= read();
    int ans = 1;
    int minn = 1e9,maxn=0;
    for (int i = 1; i<= n;i++) {
        int tmp =read();
        mp[tmp]++;
        minn = min(minn,tmp);
        maxn = max(maxn,tmp);
        ans *= tmp;
        if (mp[tmp]>1) {
            cout<<"-1\n";
            return 0;
        }
    }
    mp[1]++;
    for (int i = 2; i<= 1e6;i++) {
        if (mp[i]) {
            for (int j =1;j * j<= i; j++) {
                if (i % j == 0) {
                    if (mp[j] && mp[i/j]) {
                        continue;
                    }
                    cout<<"-1\n";
                    return 0;
                }
            }
        }
    }
    cout<<minn * maxn<<"\n";
    return 0;
}

posted @ 2025-06-01 09:55  Guaninf  阅读(5)  评论(0)    收藏  举报