题目链接
N个数的gcd显然小于等于其中最大值 1e6不是很多
根据初始集合中的元素做倍增得到所有答案。
枚举gcd=i 去计算
ll ans[3000009];
signed main()
{
ll t;
read(t);
while(t--)
{
ll n;
ll m;
read(n);
read(m);
for(int i=1; i<=n; i++)
{
ll x;
read(x);
ans[x]=1;
}
for(int i=1; i<=n; i++)
{
if(ans[i])
continue;
ll g=0;
for(int j=2*i; j<=n; j=j+i)
{
if(!ans[j])
continue;
g=gcd(g,j);
if(g==i)
{
ans[i]=1;
break;
}
}
}
while(m--)
{
ll x;
read(x);
if(ans[x])
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
memset(ans,0,sizeof(ans));
}
}