Advertisement
fahad005

sieve.cpp

Jun 28th, 2021
803
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. //
  4. #define ll long long
  5. #define ull unsigned long long
  6. #define pb push_back
  7. #define mx 100010
  8. #define mod 1000000007
  9. #define inf INT_MAX
  10. #define pi acos(-1)
  11. #define endl '\n'
  12. #define fin freopen("input", "r", stdin)
  13. #define Fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
  14. //
  15. vector<ll> primes;
  16.  
  17. void sieve(ll n) {
  18.     vector<bool> isPrime(n + 5, true);
  19.  
  20.     for (ll i = 3; i * i <= n; i += 2) {
  21.         if (isPrime[i]) {
  22.             for (ll j = i * i; j <= n; j += i + i) {
  23.                 isPrime[j] = false;
  24.             }
  25.         }
  26.     }
  27.  
  28.     primes.pb(2);
  29.     for (ll i = 3; i <= n; i += 2) {
  30.         if (isPrime[i]) primes.pb(i);
  31.     }
  32. }
  33. void segSieve(ll l, ll r) {
  34.     vector<bool> isPrime(r - l + 1, true);
  35.     if (l == 1) isPrime[0] = false;
  36.  
  37.     for (ll i = 0; primes[i] * primes[i] <= r; i++) {
  38.         ll curPrime = primes[i];
  39.         ll base = l / curPrime * curPrime;
  40.         if (l % curPrime != 0) base += curPrime;
  41.  
  42.         for (ll j = base; j <= r; j += curPrime) isPrime[j - l] = false;
  43.         if (curPrime == base) isPrime[base - l] = true;
  44.     }
  45.  
  46.     for (ll i = 0; i < r - l + 1; i++) {
  47.         if (isPrime[i]) cout << l + i << " ";
  48.     }
  49.     cout << endl;
  50. }
  51.  
  52. int main() {
  53.     sieve(10000000);
  54.     segSieve(1, 100);
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement