Super_Cube
2024-11-17 11:23:38
首先以
于是若存在两个不同质数,直接无解。若不存在质数,直接输出
现在只剩下一个质数
#include<bits/stdc++.h>
int g[400005];
inline void sieve(int n){
for(int i=2;i*i<=n;++i)
if(!g[i])for(int j=i*i;j<=n;j+=i)if(!g[j])g[j]=i;
}
int a[100005];
int T,n,v;
int main(){
sieve(4e5);
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=1;i<=n;scanf("%d",&a[i++]));
v=0;
for(int i=1;i<=n;++i)
if(!g[a[i]]){
if(!v)v=a[i];
else if(v!=a[i]){
puts("-1");
goto nxt;
}
}
if(!v){
puts("2");
continue;
}
for(int i=1;i<=n;++i){
if(a[i]==v)continue;
if(a[i]-(a[i]&1?g[a[i]]:0)<(v<<1)){
puts("-1");
goto nxt;
}
}
printf("%d\n",v);
nxt:;
}
return 0;
}