Created
February 25, 2020 16:42
-
-
Save SuryaPratapK/909585384607cb0502901e9e51f6e30e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// C++ program to print all primes smaller than or equal to | |
// n using Sieve of Eratosthenes | |
#include <bits/stdc++.h> | |
using namespace std; | |
void SieveOfEratosthenes(int n) | |
{ | |
// Create a boolean array "prime[0..n]" and initialize | |
// all entries it as true. A value in prime[i] will | |
// finally be false if i is Not a prime, else true. | |
bool prime[n+1]; | |
memset(prime, true, sizeof(prime)); | |
for (int p=2; p*p<=n; p++) | |
{ | |
// If prime[p] is not changed, then it is a prime | |
if (prime[p] == true) | |
{ | |
// Update all multiples of p greater than or | |
// equal to the square of it | |
// numbers which are multiple of p and are | |
// less than p^2 are already been marked. | |
for (int i=p*p; i<=n; i += p) | |
prime[i] = false; | |
} | |
} | |
// Print all prime numbers | |
for (int p=2; p<=n; p++) | |
if (prime[p]) | |
cout << p << " "; | |
} | |
// Driver Program to test above function | |
int main() | |
{ | |
int n = 30; | |
cout << "Following are the prime numbers smaller " | |
<< " than or equal to " << n << endl; | |
SieveOfEratosthenes(n); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@anilbhatt The condition
for(int i=pp ; i<=n ; i+=p) is efficient as
any number less than pp like ((p-1)*p) will be handled in previous values of p itself.
Hence it is redundant for making the same number false again and again.
for example
consider p = 3 then 2*3 or 6 will be handled when p=2 itself hence it is not required to check in p = 3.