Advertisement
Salman_CUET_18

N-Factorful

Jul 1st, 2020
1,361
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define int long long
  3. #define fastio  ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
  4. #define debug(x) cout << #x << "--> " << x << endl;
  5. #define pii pair<int, int>
  6. using namespace std;
  7. #define M 1000000
  8. int marked[M + 2];
  9. vector<int>primes;
  10. void sieve(void)
  11. {
  12.     for(int i = 3; i * i <= M; i += 2)
  13.     {
  14.         if(marked[i] == false)
  15.         {
  16.             for(int j = i * i; j <= M; j += i + i)
  17.                 marked[j] = true;
  18.         }
  19.     }
  20.     primes.push_back(2);
  21.     for(int i = 3; i <= M; i += 2)
  22.     {
  23.         if(marked[i] == false)
  24.             primes.push_back(i);
  25.     }
  26. }
  27. bool isprime(int n)
  28. {
  29.     if(n <= 1) return false;
  30.     if(n == 2) return true;
  31.     if(n % 2 == 0) return false;
  32.     return (marked[n] == false);
  33. }
  34. int distinctprime(int n)
  35. {
  36.     int cnt = 0;
  37.     for(int i = 0; primes[i] * primes[i] <= n; i++)
  38.     {
  39.         if(n % primes[i] == 0)
  40.         {
  41.             cnt++;
  42.             while(n % primes[i] == 0) n /= primes[i];
  43.         }
  44.     }
  45.     if(n > 1) cnt++;
  46.     return cnt;
  47. }
  48. vector<int>vec[M];
  49. void precal()
  50. {
  51.     for(int i = 1; i <= M; i++)
  52.     {
  53.         if(isprime(i)) vec[1].push_back(i);
  54.         else vec[distinctprime(i)].push_back(i);
  55.     }
  56. }
  57. main()
  58. {
  59.     fastio;
  60.     sieve();
  61.     precal();
  62.     int tc; cin >> tc;
  63.     while(tc--)
  64.     {
  65.         int a, b, n; cin >> a >> b >> n;
  66.         vector<int>tmp = vec[n];//take all the numbers having n distinct factors
  67.         int idx1 = lower_bound(tmp.begin(), tmp.end(), a) - tmp.begin();
  68.         int idx2 = upper_bound(tmp.begin(), tmp.end(), b) - tmp.begin();
  69.         cout << idx2 - idx1 << endl;
  70.     }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement