//print prime numbers from range..l....to....r
#include<bits/stdc++.h>
using namespace std;
#define all(v) v.begin(), v.end()
typedef long long ll;
vector<ll> sieve(ll n)
{
vector<bool> prime(n + 1, true);
prime[0] = false;
prime[1] = false;
long long int m = sqrt(n);
for (ll p = 2; p <= m; p++) {
// If prime[p] is not changed, then it
// is a prime
if (prime[p]) {
// Update all multiples of p
for (ll i = p * p; i <= n; i += p)
prime[i] = false;
}
}
// push all the primes into the vector ans
vector<ll> ans;
for (ll i = 0; i < n; i++)
if (prime[i])
ans.push_back(i);
return ans;
}
vector<ll> sieveRange(ll start, ll end)
{
// find primes from [0..end] range
vector<ll> ans = sieve(end);
// Find index of first prime greater than or
// equal to start
// O(sqrt(n)loglog(n))
ll lower_bound_index = lower_bound(all(ans), start) - ans.begin();
ans.erase(ans.begin(), ans.begin() + lower_bound_index);
return ans;
}
int main() {
ll l,r;
l = 2 ;
r = 103;
r++;
ll start = l;
ll end = r;
vector<ll> ans = sieveRange(start, end);
for (auto i : ans) {
cout<<i<<endl ;
}
return 0;
}
Ly9wcmludCBwcmltZSBudW1iZXJzIGZyb20gcmFuZ2UuLmwuLi4udG8uLi4ucgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOyAKI2RlZmluZSBhbGwodikgdi5iZWdpbigpLCB2LmVuZCgpIAp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdmVjdG9yPGxsPiBzaWV2ZShsbCBuKSAKeyAKCXZlY3Rvcjxib29sPiBwcmltZShuICsgMSwgdHJ1ZSk7IAogCXByaW1lWzBdID0gZmFsc2U7IAoJcHJpbWVbMV0gPSBmYWxzZTsgCglsb25nIGxvbmcgaW50IG0gPSBzcXJ0KG4pOyAKIAlmb3IgKGxsIHAgPSAyOyBwIDw9IG07IHArKykgeyAKIAoJCS8vIElmIHByaW1lW3BdIGlzIG5vdCBjaGFuZ2VkLCB0aGVuIGl0IAoJCS8vIGlzIGEgcHJpbWUgCgkJaWYgKHByaW1lW3BdKSB7IAogCgkJCS8vIFVwZGF0ZSBhbGwgbXVsdGlwbGVzIG9mIHAgCgkJCWZvciAobGwgaSA9IHAgKiBwOyBpIDw9IG47IGkgKz0gcCkgCgkJCQlwcmltZVtpXSA9IGZhbHNlOyAKCQl9IAoJfSAKIAoJLy8gcHVzaCBhbGwgdGhlIHByaW1lcyBpbnRvIHRoZSB2ZWN0b3IgYW5zIAoJdmVjdG9yPGxsPiBhbnM7IAoJZm9yIChsbCBpID0gMDsgaSA8IG47IGkrKykgCgkJaWYgKHByaW1lW2ldKSAKCQkJYW5zLnB1c2hfYmFjayhpKTsgCglyZXR1cm4gYW5zOyAKfSAKIAp2ZWN0b3I8bGw+IHNpZXZlUmFuZ2UobGwgc3RhcnQsIGxsIGVuZCkgCnsgCgkvLyBmaW5kIHByaW1lcyBmcm9tIFswLi5lbmRdIHJhbmdlIAoJdmVjdG9yPGxsPiBhbnMgPSBzaWV2ZShlbmQpOyAKIAoJLy8gRmluZCBpbmRleCBvZiBmaXJzdCBwcmltZSBncmVhdGVyIHRoYW4gb3IgCgkvLyBlcXVhbCB0byBzdGFydCAKCS8vIE8oc3FydChuKWxvZ2xvZyhuKSkgCglsbCBsb3dlcl9ib3VuZF9pbmRleCA9IGxvd2VyX2JvdW5kKGFsbChhbnMpLCBzdGFydCkgLSBhbnMuYmVnaW4oKTsgCglhbnMuZXJhc2UoYW5zLmJlZ2luKCksIGFucy5iZWdpbigpICsgbG93ZXJfYm91bmRfaW5kZXgpOyAKIAoJcmV0dXJuIGFuczsgCn0gCiAKIAppbnQgbWFpbigpIHsKICAgIGxsIGwscjsKICAgIGwgPSAyIDsgCiAgICByID0gMTAzOwogICAgcisrOwogICAgbGwgc3RhcnQgPSBsOyAKICAgIGxsIGVuZCA9IHI7IAogICAgdmVjdG9yPGxsPiBhbnMgPSBzaWV2ZVJhbmdlKHN0YXJ0LCBlbmQpOyAKICAgIGZvciAoYXV0byBpIDogYW5zKSB7CiAgICAgICAgY291dDw8aTw8ZW5kbCA7IAogICAgfQoJcmV0dXJuIDA7IAp9ICA=