Common Generator

注意到两个素数之间是肯定不可以相互生成的,所以如果数组中包含两个及以上的素数时,x就不存在。而当数组中不包含素数时,2就是一个满足条件的数,因为任意偶数都可以由若干个二相加得到,而奇数肯定存在一个奇数因子(因为前提条件是都是合数),这个奇数减掉这个因子就变成了偶数,可以由2生成。当数组中有且仅有一个素数时,如果存在x,那么这个x必定是这个素数,然后把这个素数用上面的方法检验其它数是否能由它生成即可
`#include

int ss(int n) {
if (n == 1) return 0;
for (int i = 2;i * i <= n;i++) {
if (n % i == 0) return 0;
}
return 1;
}

void solve() {
int n, a[100007], k = 0,ok=0;
scanf_s("%d", &n);
for (int j = 0;j < n;j++) {
scanf_s("%d", &a[j]);
if (ss(a[j])) {
if (k == 0) k = a[j];
else {
ok=1; //两个及以上素数
}
}
}
if (ok) {
printf("-1\n");
return;
}
if (k == 0) {
printf("2\n");//没有素数
return;
}
for (int j = 0;j < n;j++) {
if (a[j] == k) continue;
if (a[j] % 2 == 0) {
if (a[j] < 2 * k) {
ok=1;
break;
}
}
else {
int min;
for (int i = 2;i * i <= a[j];i++) {
if (a[j] % i == 0) {
min = i;
break;
}
}
if (2 * k > a[j] - min) {
ok=1;
break;
}
}
}
if (ok) printf("-1\n");
else printf("%d\n", k);
return;
}

int main() {
int t;
scanf_s("%d", &t);
for (int i = 0;i < t;i++) {
solve();
}
return 0;
}`

posted @ 2025-02-10 20:49  十柒*  阅读(3)  评论(0编辑  收藏  举报