You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// 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){
11
11
isprime[0] = isprime[1] = false;
12
12
// 1st method
13
13
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
16
16
isprime[j] = false;
17
17
}
18
18
}
19
19
}
20
20
// 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
24
24
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
27
27
isprime[j] = false;
28
28
}
29
29
}
30
30
}
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
34
34
isprime[j] = false;
35
35
}
36
36
}
37
37
}
38
38
// 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)
40
40
}
41
41
42
42
signedmain(){
43
43
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
0 commit comments