大致思路是求出倍数,标记数组,确保不TLE
感觉基本都考虑到了,求大佬救蒟蒻。
#include<bits/stdc++.h>
using namespace std;
int k[300005],l[300005],n,m,x;
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>x;
k[x]++;
}
for(int i=1;i<=3e5;i++)if(k[i]){
if(k[i]>=2)l[1]++;
if(k[1])l[i]++;
for(int j=1;j<=sqrt(i);j++)if(i%j==0){
if(k[i/j])l[j]++;
if(k[j])l[i/j]++;
}
}
for(int i=0;i<m;i++){
cin>>x;
if(l[x])cout<<"YES\n";
else cout<<"NO\n";
}
}