"字节跳动杯"2018中国大学生程序设计竞赛-女生专场

口算训练

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <string>
 6 #include <map>
 7 #include <cmath>
 8 #include <vector>
 9 
10 #define Faster ios::sync_with_stdio(false),cin.tie(0)
11 #define Read freopen("in.txt","r",stdin),freopen("out.txt","w",stdout)
12 #define Close fclose(stdin),fclose(stdout)
13 const int maxn = 1e5 + 5;
14 using namespace std;
15 const int MOD = 1e9+7;
16 typedef long long ll;
17 
18 vector<int> g[maxn];
19 //下标肯定是从小到大按顺序的
20 
21 void res(int id, int x){
22     for(int i = 2;i*i <= x;i++){
23         while(x%i == 0){
24             g[i].push_back(id);
25             x /= i;
26         }
27     }
28     if(x > 1)
29         g[x].push_back(id);
30 }
31 
32 int query(int l,int r, int x){
33     return upper_bound(g[x].begin(), g[x].end(), r) - lower_bound(g[x].begin(),g[x].end(), l);
34 }
35 
36 void init(){
37     for(int i = 0;i < maxn;i++)
38         g[i].clear();
39 }
40 
41 int main(){
42     // Faster;
43     int t;
44     // cin >> t;
45     scanf("%d", &t);
46     while(t--){
47         init();
48         int n, q;
49         scanf("%d%d", &n, &q);
50         for(int i = 1;i <= n;i++){
51             int x;
52             // cin >> x;
53             scanf("%d", &x);
54             res(i, x);
55         }
56         while(q--){
57             int l, r, d, num;
58             // cin >> l >> r >> d;
59             scanf("%d%d%d", &l, &r, &d);
60             bool ok = true;
61             for(int i = 2;i*i <= d;i++){
62                 int cnt = 0;
63                 while(d%i == 0){
64                     cnt++;
65                     d /= i;
66                 }
67                 //因子为i 的数目 大于(l,r)中i 的个数
68                 num = query(l, r, i);
69                 if(cnt > num){
70                     ok = false;
71                     break;
72                 }
73             }
74             if(ok && d > 1){
75                 num = query(l, r, d);
76                 if(num == 0)
77                     ok = false;
78             }
79             if(ok)
80                 // cout << "Yes" << endl;
81                 printf("Yes\n");
82             else
83                 // cout << "No" << endl;
84                 printf("No\n");
85         }
86     }
87     return 0;
88 }
View Code

猜你喜欢

转载自www.cnblogs.com/jaydenouyang/p/9106545.html