蓝桥杯 被污染的支票
题意
给定\(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;
}