
- C++ Basics
- C++ Home
- C++ Overview
- C++ Environment Setup
- C++ Basic Syntax
- C++ Comments
- C++ Data Types
- C++ Variable Types
- C++ Variable Scope
- C++ Constants/Literals
- C++ Modifier Types
- C++ Storage Classes
- C++ Operators
- C++ Loop Types
- C++ Decision Making
- C++ Functions
- C++ Numbers
- C++ Arrays
- C++ Strings
- C++ Pointers
- C++ References
- C++ Date & Time
- C++ Basic Input/Output
- C++ Data Structures
- C++ Object Oriented
- C++ Classes & Objects
- C++ Inheritance
- C++ Overloading
- C++ Polymorphism
- C++ Abstraction
- C++ Encapsulation
- C++ Interfaces
C++ Program to Implement Segmented Sieve to Generate Prime Numbers Between Given Range
This is C++ program to implement Segmented Sieve to Generate Prime Numbers Between Given Range. Segmented Sieve first uses Simple Sieve to find primes smaller than or equal to √(n). The idea of this algorithm is to divide the range [0 ... n-1] in different segments and compute primes in all segments one by one.
Algorithm
Begin Create function to find all primes smaller than limit using simple sieve of eratosthenes. Finds all prime numbers in given range using segmented sieve A) Compute all primes smaller or equal to square root of high using simple sieve B) Count of elements in given range C) Declaring boolean only for [low, high] D) Find the minimum number in [low ... high] that is a multiple of prime[i] (divisible by prime[i]) E) Mark multiples of prime[i] in [low … high] F) Numbers which are not marked in range, are prime End
Example Code
#include <bits/stdc++.h> using namespace std; void simpleSieve(int lmt, vector<int>& prime) { bool mark[lmt + 1]; memset(mark, false, sizeof(mark)); for (int i = 2; i <= lmt; ++i) { if (mark[i] == false) { prime.push_back(i); for (int j = i; j <= lmt; j += i) mark[j] = true; } } } void PrimeInRange(int low, int high) { int lmt = floor(sqrt(high)) + 1; vector<int> prime; simpleSieve(lmt, prime); int n = high - low + 1; bool mark[n + 1]; memset(mark, false, sizeof(mark)); for (int i = 0; i < prime.size(); i++) { int lowLim = floor(low / prime[i]) * prime[i]; if (lowLim < low) lowLim += prime[i]; for (int j = lowLim; j <= high; j += prime[i]) mark[j - low] = true; } for (int i = low; i <= high; i++) if (!mark[i - low]) cout << i << " "; } int main() { int low = 10, high = 50; PrimeInRange(low, high); return 0; }
Output
11 13 17 19 23 29 31 37 41 43 47
- Related Articles
- C++ Program to Implement Wheel Sieve to Generate Prime Numbers Between Given Range
- C++ Program to Implement Sieve of eratosthenes to Generate Prime Numbers Between Given Range
- C++ Program to Implement Sieve of Atkin to Generate Prime Numbers Between Given Range
- C++ Program to Generate Prime Numbers Between a Given Range Using the Sieve of Sundaram
- C++ Program to Generate Randomized Sequence of Given Range of Numbers
- Program to print prime numbers in a given range using C++ STL
- Program to find Prime Numbers Between given Interval in C++
- Write a Golang program to find prime numbers in a given range
- Java Program to get prime numbers using the Sieve of Eratosthenes algorithm
- Print prime numbers in a given range using C++ STL
- C++ Program to Display Prime Numbers Between Two Intervals
- Python program to generate random numbers within a given range and store in a list?
- Java program to generate random numbers within a given range and store in a list
- How to generate prime numbers using Python?
- How to generate Prime Numbers in JavaScript?

Advertisements