Sreekar_0125

Untitled

Sep 29th, 2023
975
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. #define endl '\n'
  5.  
  6. const int N = 2e5;
  7.  
  8. vector<bool> sieve(N + 5, true);
  9. vector<int> primes;
  10. void gensieve()
  11. {
  12.     sieve[0] = sieve[1] = false;
  13.     for (int i = 2; i <= sqrt(N); i++)
  14.     {
  15.         if (sieve[i])
  16.         {
  17.             for (int j = i * i; j <= N; j += i)
  18.                 sieve[j] = false;
  19.         }
  20.     }
  21.     for (int i = 2; i <= N; i++)
  22.     {
  23.         if (sieve[i])
  24.             primes.push_back(i);
  25.     }
  26. }
  27.  
  28. void fast()
  29. {
  30.     ios_base::sync_with_stdio(false);
  31.     cin.tie(NULL);
  32.     cout.tie(NULL);
  33. }
  34.  
  35. int find(int limit, vector<int> &primeFactors)
  36. {
  37.     int valid = 0;
  38.     int sz = primeFactors.size();
  39.     for (int mask = 1; mask < (1 << sz); mask++)
  40.     {
  41.         int x = mask;
  42.         int bit = 0;
  43.         int product = 1;
  44.         bool exceeded = false;
  45.  
  46.         while (x)
  47.         {
  48.             if (x & 1)
  49.             {
  50.                 if (product > (limit / primeFactors[bit]))
  51.                 {
  52.                     exceeded = true;
  53.                     break;
  54.                 }
  55.                 product *= primeFactors[bit];
  56.             }
  57.             bit++;
  58.             x >>= 1;
  59.         }
  60.  
  61.         if (exceeded)
  62.             continue;
  63.         int parity = __builtin_popcount(mask);
  64.         if (parity & 1)
  65.         {
  66.             valid += (limit / product);
  67.         }
  68.         else
  69.         {
  70.             valid -= (limit / product);
  71.         }
  72.     }
  73.     return limit - valid;
  74. }
  75.  
  76. void solve()
  77. {
  78.     int n, l, r;
  79.     cin >> n >> l >> r;
  80.  
  81.     vector<int> primeFactors;
  82.  
  83.     for (auto p : primes)
  84.     {
  85.         if (n % p == 0)
  86.         {
  87.             primeFactors.push_back(p);
  88.             while (n % p == 0)
  89.             {
  90.                 n /= p;
  91.             }
  92.         }
  93.     }
  94.     if (n >= 2)
  95.     {
  96.         primeFactors.push_back(n);
  97.     }
  98.  
  99.     int x = find(r, primeFactors);
  100.     int y = find(l - 1, primeFactors);
  101.  
  102.     cout << x - y << endl;
  103. }
  104.  
  105. signed main()
  106. {
  107.     fast();
  108.     int t = 1;
  109.     cin >> t;
  110.     gensieve();
  111.     while (t--)
  112.     {
  113.         solve();
  114.     }
  115.     return 0;
  116. }
  117.  
Advertisement
Add Comment
Please, Sign In to add comment