Skip to content

Commit 8d1c877

Browse files
committed
2 parents feb3616 + 4c45db2 commit 8d1c877

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed
Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Prime Seive aka Sieve of Eratosthenes
1+
// Prime Sieve aka Sieve of Eratosthenes
22
// Time complexity : O(n*log(log(n)))
33
// Space complexity: O(n)
44
// DESC : here we will discuss how to find prime numbers in a given range
@@ -11,40 +11,45 @@ void sieve(vector<bool>& isprime, int n){
1111
isprime[0] = isprime[1] = false;
1212
// 1st method
1313
for(int i = 2; i * i <= n; i++){
14-
if(isprime[i] == true){ //if we find i'th number to be a prime number, we will mark every multiple of that number as non-prime
15-
for(int j = i*i ; j <= n; j += i){
14+
if(isprime[i] == true){ // if we find i'th number to be a prime number, we will mark every multiple of that number as non-prime
15+
for(int j = i*i ; j <= n; j += i){ // marking every multiple of i false
1616
isprime[j] = false;
1717
}
1818
}
1919
}
2020
// here we are iterating every element from 2 to sqrt(n), but since we know that 2 is the only even prime number
21-
// this can be further optimized to
22-
// first we will mark every multiple of 2, and then in the next loop we will iterating only for odd numbers
23-
// 2. more optimized
21+
// this can be further optimized
22+
// first we will mark every multiple of 2, and then in the next loop we will be iterating only for odd numbers
23+
// 2. more optimized approach
2424
for(int i = 2; i < 3; i++){
25-
if(isprime[i] == true){ //if we find i'th number to be a prime number, we will mark every multiple of that number as non-prime
26-
for(int j = i*i ; j <= n; j += i){
25+
if(isprime[i] == true){ // if we find i'th number to be a prime number, we will mark every multiple of that number as non-prime
26+
for(int j = i*i ; j <= n; j += i){ // marking every multiple of i false
2727
isprime[j] = false;
2828
}
2929
}
3030
}
31-
for(int i = 3; i * i <= n; i += 2){ // will only check for odd number
32-
if(isprime[i] == true){ //if we find i'th number to be a prime number, we will mark every multiple of that number as non-prime
33-
for(int j = i*i ; j <= n; j += i){
31+
for(int i = 3; i * i <= n; i += 2){ // will only check for odd numbers
32+
if(isprime[i] == true){ // if we find i'th number to be a prime number, we will mark every multiple of that number as non-prime
33+
for(int j = i*i ; j <= n; j += i){// marking every multiple of i false
3434
isprime[j] = false;
3535
}
3636
}
3737
}
3838
// now in the isprime vector we have prime numbers from 0 to 1000000
39-
// note that we are using isprime vector of boolean data type and not integer as it will reduce space (integer takes 4bytes, whereas bool takes 1byte)
39+
// note that we are using isprime vector of boolean data type and not integer as it will reduce space (integer takes 4bytes, whereas bool takes only 1byte)
4040
}
4141

4242
signed main(){
4343
int n=1e6;
44-
//initialize a vector isprime such that if value at an index is true then it is a prime number, else a composite
45-
//initially we consider every number as prime
44+
// initialize a vector isprime such that if value at an index is true then it is a prime number, else a composite
45+
// initially we consider every number as a prime number
4646
vector<bool> isprime(n+1,true);
4747
sieve(v,n);
48-
48+
49+
// printing prime numbers from 1 to n
50+
for( int i = 1; i <= n; i++) {
51+
if( isprime[i] == true )
52+
cout << i << " ";
53+
}
4954
return 0;
50-
}
55+
}

0 commit comments

Comments
 (0)