Advertisement
Guest User

G

a guest
Mar 25th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define pb push_back
  4. #define mp make_pair
  5. #define sz(x) ((int)(x).size())
  6. #define all(x) (x).begin(), (x).end()
  7. typedef long long ll;
  8.  
  9. const int mod = 1e9 + 7;
  10. const int N = 1e6 + 4;
  11.  
  12. int n;
  13. int smf[N];
  14. long long L, R;
  15. vector<int> pr;
  16.  
  17. long long calc(int cur, int cnt, int prod)
  18. {
  19.   if(cur >= sz(pr)){
  20.     if(!cnt)
  21.       return 0;
  22.     int t = (cnt % 2 == 0 ? -1 : 1);
  23.     return t * (R / prod - (L - 1) / prod);
  24.   }
  25.   return calc(cur + 1, cnt, prod) + calc(cur + 1, cnt + 1, prod * pr[cur]);
  26. }
  27.  
  28. void pre()
  29. {
  30.   for(int i = 1 ; i < N ; i++)
  31.     smf[i] = i;
  32.   for(int i = 2 ; i * i < N ; i++){
  33.     if(smf[i] == i){
  34.       for(int j = 2 * i ; j < N ; j += i)
  35.         smf[j] = min(smf[j], i);
  36.     }
  37.   }
  38. }
  39.  
  40. int main()
  41. {
  42.     freopen("answer.in", "r", stdin);
  43.   int T;
  44.   cin >> T;
  45.   pre();
  46.   while(T--){
  47.     cin >> n;
  48.     cin >> L >> R;
  49.     pr.clear();
  50.     while(n > 1){
  51.       int p = smf[n];
  52.       pr.push_back(p);
  53.       while(n % p == 0)
  54.         n /= p;
  55.     }
  56.     cout << R - L + 1 - calc(0, 0, 1) << endl;
  57.   }
  58.   return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement