- 对每个数字进行质因数分解,然后存到一个
s
e
t
set
set 容器里面
- 如果发现容器里面的数字有存在两个以上相同的质因数时,满足题意
#include <bits/stdc++.h>
using namespace std;
vector<int> isprime(100010);
vector<int> primes;
void solve()
{
int n;cin>>n;
vector<int> a(n);
for(int i=0;i<n;i++) cin>>a[i];
set<int> S;
for(int i=0;i<n;i++)
{
int x=a[i];
for(auto &c:primes)
if(x%c==0)
{
if(S.count(c))
{
cout<<"YES"<<endl;
return ;
}
S.insert(c);
while(x%c==0) x/=c;
}
if(x!=1)
{
if(S.count(x))
{
cout<<"YES"<<endl;
return ;
}
else S.insert(x);
}
}
cout<<"NO"<<endl;
}
int main()
{
for(int i=2;i<=100000;i++)
{
if(!isprime[i])
primes.push_back(i);
for(int j=i;j<=100000;j+=i)
isprime[j]=1;
}
int T;cin>>T;
while(T--) solve();
return 0;
}