Advertisement
Gosunov

Untitled

Aug 11th, 2023
1,026
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.77 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define set _set
  4.  
  5. const int maxn = 1000000000;
  6. char p[maxn / 16 + 1];
  7.  
  8. void set(int x) {
  9.     x >>= 1;
  10.     p[x / 8] |= '\1' << (x % 8);
  11. }
  12.  
  13. bool get(int x) {
  14.     x >>= 1;
  15.     return !((p[x / 8] >> (x % 8)) & 1);
  16. }
  17.  
  18. void build() {
  19.     for (int i = 3; i * i < maxn; i += 2) {
  20.         if (!get(i))
  21.             continue;
  22.         for (int j = i * i; j < maxn; j += (i << 1)) {
  23.             set(j);
  24.         }
  25.     }
  26. }
  27.  
  28. bool is_prime(int x) {
  29.     if (x == 2) return true;
  30.     if ((x & 1) == 0) return false;
  31.     return get(x);
  32. }
  33.  
  34. void solve() {
  35.     int primes = 0;
  36.     for (int i = 1; i < maxn; ++i)
  37.         primes += is_prime(i);
  38.     cout << primes << '\n';
  39. }
  40.  
  41. signed main() {
  42.     build();
  43.     solve();
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement