30到60分盘旋(看运气)
#include <bits/stdc++.h>
using namespace std;
int a[100010],b[100010];
bool Cmp(int x,int y)
{
return x<y;
}
int prime(int x)
{
if(x==1) return 0;
long long int k=sqrt(x);
for(long long int i=2;i<=k;i++)
{
if(x%i==0) return 0;
}
return 1;
}
int main()
{
int t,m,n;
int mark;
cin>>t;
while(t--)
{
for(int i=0;i<=max(m,n);i++)
{
a[i]=0;
b[i]=0;
}
cin>>n>>m;
int i=1,j=1;
while(i<=n)
{
cin>>a[i];
if(a[i]==1)
{
i--;
n--;
}
i++;
}
while(j<=m)
{
cin>>b[j];
if(b[j]==1)
{
j--;
m--;
}
j++;
}
if(n-m>=2 || n==m)
{
printf("NO\n");
continue;
}
sort(a+1,a+n+1,Cmp);
sort(b+1,b+m+1,Cmp);
mark=-1;
for(int j=1;j<=m;j++)
{
if(a[j]!=b[j])
{
mark=j;
break;
}
}
if(mark==-1) mark=n;
if(prime(a[mark])) printf("YES\n");
else printf("NO\n");
}
return 0;
}