fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define endl '\n'
  4. #define vi vector<int>
  5. #define fi first
  6. #define se second
  7. #define pb push_back
  8. #define FOR(a) for(auto &x : a)
  9. #define all(a) a.begin(), a.end()
  10. #define pii pair<int, int>
  11. #define rep(i, l, r) for(int i = l; i <= r; i++)
  12.  
  13. // author: ngotranthethinh
  14.  
  15. int n, q;
  16. const int MAXN = 1e6 + 5;
  17. int a[MAXN];
  18.  
  19. const int MAXPRIME = 1e7 + 5;
  20. bool nt[MAXPRIME];
  21.  
  22. void Sieve_Of_Prime(){
  23. fill(nt, nt + MAXPRIME, true);
  24. nt[0] = nt[1] = 0;
  25.  
  26. for(int i = 2; i * i < MAXPRIME; i++){
  27. if(nt[i]){
  28. for(int j = i * i; j < MAXPRIME; j += i)
  29. nt[j] = false;
  30. }
  31. }
  32. }
  33.  
  34. int b[25];
  35.  
  36. int32_t main() {
  37. ios::sync_with_stdio(false);
  38. cin.tie(0); cout.tie(0);
  39.  
  40. cin >> n >> q;
  41.  
  42. int mx = 0;
  43. rep(i, 1, n){
  44. cin >> a[i];
  45. mx = max(mx, a[i]);
  46. }
  47.  
  48. Sieve_Of_Prime();
  49.  
  50. while(q--){
  51. int l, r; cin >> l >> r;
  52.  
  53. int len = r - l + 1;
  54.  
  55. if(len > 24){
  56. cout << "NO" << endl;
  57. continue;
  58. }
  59.  
  60. int cnt = 0;
  61. rep(i, l, r){
  62. b[cnt++] = a[i];
  63. }
  64.  
  65. sort(b, b + cnt);
  66.  
  67. bool ok = true;
  68.  
  69. rep(i, 1, cnt - 1){
  70. if(b[i] == b[i - 1] || b[i] % b[i - 1] != 0){
  71. ok = false;
  72. break;
  73. }
  74. }
  75.  
  76. if(!ok){
  77. cout << "NO" << endl;
  78. continue;
  79. }
  80.  
  81. bool hasPrime = false;
  82. rep(i, 0, cnt - 1){
  83. if(nt[b[i]]){
  84. hasPrime = true;
  85. break;
  86. }
  87. }
  88.  
  89. cout << (hasPrime ? "YES" : "NO") << endl;
  90. }
  91.  
  92. return 0;
  93. }
  94.  
Success #stdin #stdout 0.06s 14484KB
stdin
Standard input is empty
stdout
Standard output is empty