Advertisement
PlanttPastes

Epic Fail na zadaca

Nov 22nd, 2023
451
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.66 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <map>
  4. using namespace std;
  5.  
  6. const int mx = 1000005;
  7. int sd[mx + 1] = {1, 1};
  8. template <bool nodcalc> struct detnum {
  9.     map <int, int> fact;
  10.     detnum <false> *nodfact;
  11.     detnum(int x) {
  12.         while (x > 1) {
  13.             fact[sd[x]]++;
  14.             x /= sd[x];
  15.         }
  16.         if (nodcalc) {
  17.             for (auto &x : fact) {
  18.                 nodfact->multiply(x.second + 1);
  19.             }
  20.         }
  21.     }
  22.     detnum() {}
  23.     detnum &multiply(const detnum &d) {
  24.         for (auto &x : d.fact) {
  25.             if (nodcalc) nodfact->divide(fact[x.first] + 1);
  26.             fact[x.first] += x.second;
  27.             if (nodcalc) nodfact->multiply(fact[x.first] + 1);
  28.         }
  29.         return *this;
  30.     }
  31.     detnum &divide(const detnum &d) {
  32.         for (auto &x : d.fact) {
  33.             if (nodcalc) nodfact->divide(fact[x.first] + 1);
  34.             fact[x.first] -= x.second;
  35.             if (nodcalc) nodfact->multiply(fact[x.first] + 1);
  36.         }
  37.         return *this;
  38.     }
  39.     template <bool nc> bool divisible(const detnum <nc> &d) {
  40.         for (auto &x : d.fact) {
  41.             if (fact[x.first] < x.second) return false;
  42.         }
  43.         return true;
  44.     }
  45.     bool refactorable() {
  46.         return divisible(*nodfact);
  47.     }
  48. };
  49. void solve() {
  50.     int n, q, x;
  51.     char k;
  52.     cin >> n >> q;
  53.     detnum <true> facm(n), facn;
  54.     facn = facm;
  55.     while (q--) {
  56.         cin >> k;
  57.         if (k == '2') facn = facm;
  58.         else {
  59.             cin >> x;
  60.             cout << (facn.multiply(x).refactorable() ? "YES\n" : "NO\n");
  61.         }
  62.     }
  63.     cout << '\n';
  64. }
  65.  
  66. signed main() {
  67.     #ifdef ONLINE_JUDGE
  68.     ios::sync_with_stdio(0);
  69.     cin.tie(0); cout.tie(0);
  70.     #endif
  71.  
  72.     for (int i = 2; i <= mx; i++) {
  73.         if (!sd[i]) {
  74.             sd[i] = i;
  75.             for (int j = 2; i * j <= mx; j++) {
  76.                 if (!sd[i * j]) sd[i * j] = i;
  77.             }
  78.         }
  79.     }
  80.  
  81.     int t;
  82.     cin >> t;
  83.     while (t--) solve();
  84.     return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement