Sieve of Eratosthenes
Sieve of Eratosthenes
The Sieve of Eratosthenes is an ancient algorithm used to find all prime numbers up to a specified integer. It is efficient and easy to implement, making it one of the most popular algorithms for generating a list of primes.
Video Explanation

Algorithm
Steps:
- Create a list of consecutive integers from 2 to (the limit).
- Start with the first prime number .
- Mark all multiples of (from to ) as composite (not prime).
- Find the next number in the list that is not marked. This number is the next prime .
- Repeat steps 3 and 4 until is greater than .
- The numbers that remain unmarked in the list are all the prime numbers up to .
Example
To find all prime numbers up to 30:
- Start with the list: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
- Mark multiples of 2: [2, 3, X, 5, X, 7, X, 9, X, 11, X, 13, X, 15, X, 17, X, 19, X, 21, X, 23, X, 25, X, 27, X, 29, X]
- Mark multiples of 3: [2, 3, X, 5, X, 7, X, X, X, 11, X, 13, X, X, 17, X, 19, X, X, X, 23, X, 25, X, X, X, 29, X]
- Continue this process until all multiples of primes are marked.
- The unmarked numbers are: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29.
Time Complexity
- The time complexity of the Sieve of Eratosthenes is , where is the limit up to which prime numbers are generated. This makes it very efficient for large values of ..
Space Complexity
- The space complexity is due to the array used to mark the prime numbers.
Implementations
C++
#include <iostream>
#include <vector>
using namespace std;
void sieveOfEratosthenes(int n) {
vector<bool> isPrime(n + 1, true);
isPrime[0] = isPrime[1] = false; // 0 and 1 are not prime numbers
for (int p = 2; p * p <= n; p++) {
if (isPrime[p]) {
for (int i = p * p; i <= n; i += p) {
isPrime[i] = false; // Mark multiples of p as non-prime
}
}
}
cout << "Prime numbers up to " << n << " are: ";
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
cout << i << " ";
}
}
cout << endl;
}
int main() {
int n = 30; // Limit
sieveOfEratosthenes(n);
return 0;
}
Java
import java.util.Arrays;
public class SieveOfEratosthenes {
public static void sieve(int n) {
boolean[] isPrime = new boolean[n + 1];
Arrays.fill(isPrime, true);
isPrime[0] = isPrime[1] = false; // 0 and 1 are not prime numbers
for (int p = 2; p * p <= n; p++) {
if (isPrime[p]) {
for (int i = p * p; i <= n; i += p) {
isPrime[i] = false; // Mark multiples of p as non-prime
}
}
}
System.out.print("Prime numbers up to " + n + " are: ");
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
System.out.print(i + " ");
}
}
System.out.println();
}
public static void main(String[] args) {
int n = 30; // Limit
sieve(n);
}
}
Python
def sieve_of_eratosthenes(n):
is_prime = [True] * (n + 1)
is_prime[0], is_prime[1] = False, False # 0 and 1 are not prime numbers
for p in range(2, int(n**0.5) + 1):
if is_prime[p]:
for i in range(p * p, n + 1, p):
is_prime[i] = False # Mark multiples of p as non-prime
print(f"Prime numbers up to {n} are: ", end="")
for i in range(2, n + 1):
if is_prime[i]:
print(i, end=" ")
print()
n = 30 # Limit
sieve_of_eratosthenes(n)
Pseudo Code
function sieveOfEratosthenes(n):
create an array isPrime[0...n] and initialize all entries as true
isPrime[0] = isPrime[1] = false // 0 and 1 are not prime numbers
for p from 2 to sqrt(n):
if isPrime[p] is true:
for i from p^2 to n with step p:
isPrime[i] = false // Mark multiples of p as non-prime
print "Prime numbers up to n are:"
for i from 2 to n:
if isPrime[i] is true:
print i
Conclusion
The Sieve of Eratosthenes is an efficient and straightforward algorithm for finding all prime numbers up to a given limit. Its simplicity and efficiency make it a favorite among computer scientists and mathematicians for generating prime numbers in various applications.
Test Your Understanding
Answer these 3 questions to check what you have learned.
What is the main topic of this documentation page?
What should be identified before implementing sieve of eratosthenes?
How is understanding of sieve of eratosthenes best checked?
Done with this topic? Mark it as complete to track your progress.
💬 Discuss this page
Have a question or spot something confusing in "Sieve of Eratosthenes"? Ask below — it's backed by GitHub Discussions, so maintainers get notified like any other GitHub activity.