NC229589. 来点gcd
描述
输入描述
多组数据,先读入一个 T 代表组数
对于每组数据 :
第一行两个正整数 n , m 分别代表集合包含的元素个数和询问个数
第二行 n 个正整数 ai ,代表集合内的具体元素 ( 1 ≤ ai ≤ n )
接下来 m 行每行一个正整数 x 代表当前询问的数 ( 1 ≤ x ≤ n )
保证 T 组数据中 n,m 的总和不超过 1e6
输出描述
输出 m 行,每行输出 “YES” 或者 “NO” ( 不包含引号 )
示例1
输入:
2 7 3 2 2 6 6 2 1 5 3 2 6 7 3 6 3 1 4 6 4 3 7 5 2
输出:
NO YES YES NO NO YES
说明:
第一组样例C++ 解法, 执行用时: 874ms, 内存消耗: 50092K, 提交时间: 2021-11-12 17:49:14
#include <bits/stdc++.h> using namespace std; const int N = 1e6+10; int n,m,x; int main(){ int t; scanf("%d",&t); while(t--){ unordered_map<int,int> h; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d",&x); h[x]++; } while(m--){ scanf("%d",&x); int p=0; for(int i=x;i<=n&&p!=x;i+=x){ if(h[i]) p=__gcd(i,p); } if(p==x) puts("YES"); else puts("NO"); } } return 0; }