悬赏关注!! 48分 WA 萌新求调!!!
查看原帖
悬赏关注!! 48分 WA 萌新求调!!!
581928
jasonliujiahua楼主2023/7/22 19:45
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+10;
int t,n,sum,d,a[maxn],v[maxn],p[maxn];
bool w[1000000010];
void prime()
{
    for(int i=2;i<=20010;i++)
    {
        if(!v[i])
        {
            p[++sum]=i;
            v[i]=i;
        }
        for(int j=1;j<=sum && i*p[j]<=20010;j++)
        {
            v[i*p[j]]=p[j];
            if(i%p[j]==0) break;
        }
    }
}
int gcd(int x,int y)
{
    if(y==0) return x;
    return gcd(y,x%y);
}
void init()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=sum;i++)
    {
        // cout<<"-- "<<p[i]<<endl;
        w[i]=0;
    }
}
bool check(int i)
{
    for(int j=1;j<=sum && p[j]*p[j]<=a[i];j++)
    {
        if(a[i]%p[j]==0)
        {
            // cout<<" "<<a[i]<<" "<<p[j]<<endl;
            if(w[p[j]])
            {
                return false;
            }
            w[p[j]]=1;
        }
        while(a[i]%p[j]==0) a[i]/=p[j];
    }
    if(a[i]!=1)
    {
        if(w[a[i]]) 
        {
            return false;
        }
        w[a[i]]=1;
    }
    return true;
}
void work()
{
    if(n==2)
    {
        cout<<"Yes\n";
        return;
    }
    d=a[1];
    for(int i=2;i<=n;i++) d=gcd(d,a[i]);
    // cout<<" "<<d<<endl;
    if(d!=1)
    {
        cout<<"No\n";
        return;
    }
    bool ok=1;
    for(int i=1;i<=n;i++)
    {
        if(!check(i)) ok=0;
    }
    if(ok) cout<<"Yes\n";
    else cout<<"No\n";
}
int main()
{
    // freopen("1.in","r",stdin);
    // freopen("1.out","w",stdout);
    prime();
    cin>>t;
    while(t--)
    {
        init();
        work();
    }
    return 0;
}
2023/7/22 19:45
加载中...