Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define set _set
- const int maxn = 1000000000;
- char p[maxn / 16 + 1];
- void set(int x) {
- x >>= 1;
- p[x / 8] |= '\1' << (x % 8);
- }
- bool get(int x) {
- x >>= 1;
- return !((p[x / 8] >> (x % 8)) & 1);
- }
- void build() {
- for (int i = 3; i * i < maxn; i += 2) {
- if (!get(i))
- continue;
- for (int j = i * i; j < maxn; j += (i << 1)) {
- set(j);
- }
- }
- }
- bool is_prime(int x) {
- if (x == 2) return true;
- if ((x & 1) == 0) return false;
- return get(x);
- }
- void solve() {
- int primes = 0;
- for (int i = 1; i < maxn; ++i)
- primes += is_prime(i);
- cout << primes << '\n';
- }
- signed main() {
- build();
- solve();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement