Sieve of Eratosthenes

Last Updated : 06 Mar, 2024

Given a number n, print all primes smaller than or equal to n. It is also given that n is a small number.Â

Example:Â

Input : n =10
Output : 2 3 5 7Â

Input : n = 20Â
Output: 2 3 5 7 11 13 17 19

The sieve of Eratosthenes is one of the most efficient ways to find all primes smaller than n when n is smaller than 10 million or so.

Following is the algorithm to find all the prime numbers less than or equal to a given integerÂ nÂ by the Eratostheneâ€™s method:Â
When the algorithm terminates, all the numbers in the list that are not marked are prime.

Explanation with Example:Â

Let us take an example when n = 100. So, we need to print all prime numbers smaller than or equal to 100.Â

We create a list of all numbers from 2 to 100.Â Â

According to the algorithm we will mark all the numbers which are divisible by 2 and are greater than or equal to the square of it.Â

Now we move to our next unmarked number 3 and mark all the numbers which are multiples of 3 and are greater than or equal to the square of it.Â Â

We move to our next unmarked number 5 and mark all multiples of 5 and are greater than or equal to the square of it.Â Â

We move to our next unmarked number 7 and mark all multiples of 7 and are greater than or equal to the square of it.Â Â

We continue this process, and our final table will look like below:

So, the prime numbers are the unmarked ones: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89 and 97.

Implementation:Â

C++

 `// C++ program to print all primes smaller than or equal to` `// n using Sieve of Eratosthenes` `#include ` `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 Code` `int` `main()` `{` `    ``int` `n = 30;` `    ``cout << ``"Following are the prime numbers smaller "` `         ``<< ``" than or equal to "` `<< n << endl;` `    ``SieveOfEratosthenes(n);` `    ``return` `0;` `}`

C

 `// C program to print all primes smaller than or equal to` `// n using Sieve of Eratosthenes` `#include ` `#include ` `#include `   `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])` `            ``printf``(``"%d "``,p);` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `n = 30;` `    ``printf``(``"Following are the prime numbers smaller than or equal to %d \n"``, n);` `    ``SieveOfEratosthenes(n);` `    ``return` `0;` `}`   `// This code is contributed by Aditya Kumar (adityakumar129)`

Java

 `// Java program to print all primes smaller than or equal to` `// n using Sieve of Eratosthenes`   `class` `SieveOfEratosthenes {` `    ``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.` `        ``boolean` `prime[] = ``new` `boolean``[n + ``1``];` `        ``for` `(``int` `i = ``0``; i <= n; i++)` `            ``prime[i] = ``true``;`   `        ``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` `i = ``2``; i <= n; i++) {` `            ``if` `(prime[i] == ``true``)` `                ``System.out.print(i + ``" "``);` `        ``}` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `main(String args[])` `    ``{` `        ``int` `n = ``30``;` `        ``System.out.print(``"Following are the prime numbers "``);` `        ``System.out.println(``"smaller than or equal to "` `+ n);` `        ``SieveOfEratosthenes g = ``new` `SieveOfEratosthenes();` `        ``g.sieveOfEratosthenes(n);` `    ``}` `}`   `// This code is contributed by Aditya Kumar (adityakumar129)`

C#

 `// C# program to print all primes` `// smaller than or equal to n` `// using Sieve of Eratosthenes` `using` `System;`   `namespace` `prime {` `public` `class` `GFG {`   `    ``public` `static` `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 = ``new` `bool``[n + 1];`   `        ``for` `(``int` `i = 0; i <= n; i++)` `            ``prime[i] = ``true``;`   `        ``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` `                ``for` `(``int` `i = p * p; i <= n; i += p)` `                    ``prime[i] = ``false``;` `            ``}` `        ``}`   `        ``// Print all prime numbers` `        ``for` `(``int` `i = 2; i <= n; i++)` `        ``{` `            ``if` `(prime[i] == ``true``)` `                ``Console.Write(i + ``" "``);` `        ``}` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `Main()` `    ``{` `        ``int` `n = 30;` `        ``Console.WriteLine(` `            ``"Following are the prime numbers"``);` `        ``Console.WriteLine(``"smaller than or equal to "` `+ n);` `        ``SieveOfEratosthenes(n);` `    ``}` `}` `}`   `// This code is contributed by Sam007.`

Javascript

 ``

PHP

 ``

Python3

 `# Python program to print all` `# primes smaller than or equal to` `# n using Sieve of Eratosthenes`     `def` `SieveOfEratosthenes(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.` `    ``prime ``=` `[``True` `for` `i ``in` `range``(n``+``1``)]` `    ``p ``=` `2` `    ``while` `(p ``*` `p <``=` `n):`   `        ``# If prime[p] is not` `        ``# changed, then it is a prime` `        ``if` `(prime[p] ``=``=` `True``):`   `            ``# Update all multiples of p` `            ``for` `i ``in` `range``(p ``*` `p, n``+``1``, p):` `                ``prime[i] ``=` `False` `        ``p ``+``=` `1`   `    ``# Print all prime numbers` `    ``for` `p ``in` `range``(``2``, n``+``1``):` `        ``if` `prime[p]:` `            ``print``(p)`     `# Driver code` `if` `__name__ ``=``=` `'__main__'``:` `    ``n ``=` `20` `    ``print``(``"Following are the prime numbers smaller"``),` `    ``print``(``"than or equal to"``, n)` `    ``SieveOfEratosthenes(n)`

Output

```Following are the prime numbers smaller  than or equal to 30
2 3 5 7 11 13 17 19 23 29
```

Time Complexity: O(N*log(log(N)))
Auxiliary Space: O(N)

You may also like to see:Â Â

Previous
Next