danielvitor23

Hiperprimos

May 11th, 2023
1,058
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.97 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int MAXV = 2e6+5;
  5.  
  6. int main() {
  7.   cin.tie(0)->sync_with_stdio(0);
  8.  
  9.   vector<int> primes;
  10.   vector<int> cnt_primes(MAXV, 0);
  11.   vector<bool> is_prime(MAXV, true);
  12.  
  13.   is_prime[1] = false;
  14.   for (int i = 2; i < MAXV; ++i) {
  15.     if (is_prime[i]) {
  16.       cnt_primes[i] = 1;
  17.       primes.push_back(i);
  18.       for (int64_t j = (int64_t)i * i; j < MAXV; j += i) {
  19.         is_prime[j] = false;
  20.       }
  21.       for (int64_t j = (int64_t)i * i, c = 2; j < MAXV; j *= i, ++c) {
  22.         cnt_primes[j] = c;
  23.       }
  24.     }
  25.   }
  26.  
  27.   vector<int> a;
  28.   int x, maxV = -1;
  29.  
  30.   while (cin >> x) {
  31.     a.push_back(x);
  32.     maxV = max(maxV, x);
  33.   }
  34.  
  35.   vector<int> ans(maxV + 1, 0);
  36.  
  37.   for (int i = 2; i <= maxV; ++i) {
  38.     if (is_prime[cnt_primes[i] + 1]) {
  39.       ans[i] = 1;
  40.     }
  41.   }
  42.  
  43.   for (int i = 2; i <= maxV; ++i) {
  44.     ans[i] += ans[i-1];
  45.   }
  46.  
  47.   for (int i = 0; i < a.size(); ++i) {
  48.     cout << ans[a[i]] << '\n';
  49.   }
  50. }
Advertisement
Add Comment
Please, Sign In to add comment