VOOZH about

URL: https://www.geeksforgeeks.org/dsa/sieve-sundaram-print-primes-smaller-n/

⇱ Sieve of Sundaram to print all primes smaller than n - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Sieve of Sundaram to print all primes smaller than n

Last Updated : 23 Jul, 2025

Given a number n, print all primes smaller than or equal to n.

Examples:

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

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

We have discussed Sieve of Eratosthenes algorithm for the above task. 

Below is Sieve of Sundaram algorithm.

printPrimes(n)
[Prints all prime numbers smaller than n]

1) In general Sieve of Sundaram, produces primes smaller than
(2*x + 2) for given number x. Since we want primes
smaller than n, we reduce n-1 to half. We call it nNew.
nNew = (n-1)/2;
For example, if n = 102, then nNew = 50.
if n = 103, then nNew = 51

2) Create an array marked[n] that is going
to be used to separate numbers of the form i+j+2ij from
others where 1 <= i <= j

3) Initialize all entries of marked[] as false.

4) // Mark all numbers of the form i + j + 2ij as true
// where 1 <= i <= j
Loop for i=1 to nNew
a) j = i;
b) Loop While (i + j + 2*i*j) 2, then print 2 as first prime.

6) Remaining primes are of the form 2i + 1 where i is
index of NOT marked numbers. So print 2i + 1 for all i
such that marked[i] is false.

Below is the implementation of the above algorithm : 


Output
2 3 5 7 11 13 17 19 

Time Complexity: O(n log n)
Auxiliary Space: O(n)

Illustration:
All red entries in below illustration are marked entries. For every remaining (or black) entry x, the number 2x+1 is prime.
Lets see how it works for n=102, we will have the sieve for (n-1)/2 as follows: 

👁 SieveOfSundaramExample


Mark all the numbers which can be represented as i + j + 2ij

👁 SieveOfSundaramExample


Now for all the unmarked numbers in the list, find 2x+1 and that will be the prime: 
Like 2*1+1=3 
2*3+1=7 
2*5+1=11 
2*6+1=13 
2*8+1=17 and so on..
How does this work?
When we produce our final output, we produce all integers of form 2x+1 (i.e., they are odd) except 2 which is handled separately.

Let q be an integer of the form 2x + 1.

q is excluded if and only if x is of the
form i + j + 2ij. That means,

q = 2(i + j + 2ij) + 1
= (2i + 1)(2j + 1)

So, an odd integer is excluded from the final list if
and only if it has a factorization of the form (2i + 1)(2j + 1)
which is to say, if it has a non-trivial odd factor.

Source: Wiki


Reference: 
https://en.wikipedia.org/wiki/Sieve_of_Sundaram

Comment
Article Tags: