1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include <bits/stdc++.h> using namespace std; typedef long long ll; const int LEN = 1e6 + 50; bitset<LEN> vis; int tot, pri[LEN];
void f(int n) { for (int i = 2; i <= n; ++i) { if (!vis[i]) pri[++tot] = i; for (int j = 1; j <= tot && 1ll * i * pri[j] <= n; ++j) { vis[i * pri[j]] = 1; if (i % pri[j] == 0) break; } } vis.reset(); }
int main() { f(1 << 16); ll l, r; cin >> l >> r; for (int i = 1; i <= tot; ++i) { for (ll j = max(2ll, (l - 1) / pri[i] + 1) * pri[i]; j <= r; j += pri[i]) { vis[j - l] = 1; } } int ans = 0; for (int i = max(2ll, l); i <= r; ++i) { if (!vis[i - l]) ++ans; } cout << ans; return 0; }
|