Given two numbers m and n as interval range, the task is to find the prime numbers in between this interval.
Examples:
Input: m = 1, n = 10
Output: 2 3 5 7
Explanation : Primes in range from 1 to 10 are 2, 3, 5 and 7Input : m = 10, n = 20
Output : 11 13 17 19
Explanation : Primes in range from 10 to 20 are 11, 13, 17 and 19
[Naive Approach] Trial Division Method - O(n*sqrt(n)) Time and O(1) Space
The simplest method to check if a number i is prime by checking every number from 2 to i-1. If the number n is divisible by any of these, it's not prime. We check if a number if prime or not in sqrt(i) time because we just check for factors from number 2 to sqrt(i). For more details Please refer to Check for Prime Number.
- Traverse all numbers from
mton - For each number, check divisibility from
2to√n - If no divisor is found, mark the number as prime
- Store all prime numbers in the result list and return it
// C++ program to find the prime numbers
// between a given interval
#include <bits/stdc++.h>
using namespace std;
bool isPrime(int n) {
if (n <= 1)
return false;
if (n == 2)
return true;
// Numbers divisible by 2 are not prime
if (n % 2 == 0)
return false;
for (int i = 3; i * i <= n; i += 2) {
// If n is divisible by any odd number
// in this range, it is not a prime number
if (n % i == 0)
return false;
}
return true;
}
// Function to find all prime numbers in the range [m, n]
vector<int> primeRange(int m, int n) {
vector<int> ans;
for (int i = m; i <= n; i++) {
// Check if the current number is prime
if (isPrime(i))
ans.push_back(i);
}
return ans;
}
int main() {
int m = 1, n = 10;
vector<int> ans = primeRange(m, n);
for (auto &i : ans)
cout << i << " ";
return 0;
}
// Java program to find the prime numbers
// between a given interval
class GfG {
// Function to check if a number is prime
static boolean isPrime(int n) {
if (n <= 1)
return false;
if (n == 2)
return true;
// Numbers divisible by 2 are not prime
if (n % 2 == 0)
return false;
for (int i = 3; i * i <= n; i += 2) {
// If n is divisible by any odd number
// in this range, it is not a prime number
if (n % i == 0)
return false;
}
return true;
}
// Function to find all prime numbers in the range [m,
// n]
static int[] primeRange(int m, int n) {
// Temporary array to store prime numbers
int[] temp = new int[n - m + 1];
int index = 0;
// Iterate over each number in the range [m, n]
for (int i = m; i <= n; i++) {
// Check if the current number is prime
if (isPrime(i)) {
temp[index++] = i;
}
}
// Create result array with the exact size
int[] result = new int[index];
System.arraycopy(temp, 0, result, 0, index);
return result;
}
public static void main(String[] args) {
int m = 1, n = 10;
int[] ans = primeRange(m, n);
for (int num : ans) {
System.out.print(num + " ");
}
}
}
# Python program to find the prime numbers
# between a given interval
# Function to check if a number is prime
def isPrime(n):
if n <= 1:
return False
if n == 2:
return True
# Numbers divisible by 2 are not prime
if n % 2 == 0:
return False
# Check for factors from 3 to sqrt(n)
for i in range(3, int(n**0.5) + 1, 2):
if n % i == 0:
return False
return True
# Function to find all prime numbers in the range [m, n]
def primeRange(m, n):
ans = []
# Iterate over each number in the range [m, n]
for i in range(m, n + 1):
# Check if the current number is prime
if isPrime(i):
ans.append(i)
return ans
if __name__ == "__main__":
m, n = 1, 10
ans = primeRange(m, n)
print(" ".join(map(str, ans)))
// C# program to find the prime numbers
// between a given interval
using System;
using System.Collections.Generic;
class GfG {
// Function to check if a number is prime
static bool isPrime(int n) {
if (n <= 1)
return false;
if (n == 2)
return true;
// Numbers divisible by 2 are not prime
if (n % 2 == 0)
return false;
for (int i = 3; i * i <= n; i += 2) {
if (n % i == 0)
return false;
}
return true;
}
static int[] primeRange(int m, int n) {
// Temporary array to store prime numbers
int[] temp = new int[n - m + 1];
int index = 0;
// Iterate over each number in the range [m, n]
for (int i = m; i <= n; i++) {
// Check if the current number is prime
if (isPrime(i))
temp[index++] = i;
}
// Create result array of correct size
int[] result = new int[index];
Array.Copy(temp, result, index);
return result;
}
static void Main(string[] args) {
int m = 1, n = 10;
int[] ans = primeRange(m, n);
foreach(int i in ans) Console.Write(i + " ");
}
}
// JavaScript program to find the prime numbers
// between a given interval
// Function to check if a number is prime
function isPrime(n) {
if (n <= 1)
return false;
if (n === 2)
return true;
if (n % 2 === 0)
return false;
for (let i = 3; i * i <= n; i += 2) {
if (n % i === 0)
return false;
}
return true;
}
// Function to find all prime numbers in the range [m, n]
function primeRange(m, n) {
const ans = [];
for (let i = m; i <= n; i++) {
// Check if the current number is prime
if (isPrime(i))
ans.push(i);
}
return ans;
}
// driver code
const m = 1, n = 10;
const ans = primeRange(m, n);
console.log(ans.join(" "));
Output
2 3 5 7
[Expected Approach] Using Sieve of Eratosthenes - O(n loglog n) Time and O(n) Space
The idea is to precompute all prime numbers up to
nusing the Sieve of Eratosthenes. Initially, all numbers are marked as prime, then multiples of each prime number are marked as non-prime. After preprocessing, all prime numbers in the required range[m, n]can be collected efficiently.
- Create a boolean array and mark all numbers as prime initially
- Starting from
2, mark all multiples of each prime number as non-prime - After sieve computation, traverse from
mton - Store and return all numbers still marked as prime
Example for n = 10
Initially:
2 3 4 5 6 7 8 9 10 -> all marked primeStep 1: p = 2
Mark multiples of 2:
4 6 8 10 -> not prime
Remaining:
2 3 5 7 9Step 2: p = 3
Mark multiples of 3:
9 -> not primeFinal Prime Numbers:
2 3 5 7
// C++ program to find the prime numbers
// between a given interval
#include <bits/stdc++.h>
using namespace std;
// Function to implement the
// Sieve of Eratosthenes to find primes up to 'n'
vector<bool> sieveOfEratosthenes(int n) {
// Create a boolean array "prime[0..n]"
// and initialize all entries as true.
// A value in prime[i] will be false
// if 'i' is not prime, otherwise true.
vector<bool> prime(n + 1, true);
// Mark 0 and 1 as non-prime
prime[0] = false;
prime[1] = false;
// Loop through numbers from 2 to sqrt(n)
// to mark their multiples as non-prime
for (int p = 2; p * p <= n; p++) {
// If prime[p] is still true, it means 'p' is prime
if (prime[p] == true) {
// Mark all multiples of p greater
// than or equal to p^2 as non-prime
// Numbers less than p^2 would
// have already been marked as non-prime
for (int i = p * p; i <= n; i += p)
prime[i] = false;
}
}
return prime;
}
// Function to find all prime numbers in the range [m, n]
vector<int> primeRange(int m, int n) {
// Get the boolean array representing prime
// numbers up to n
vector<bool> isPrime = sieveOfEratosthenes(n);
vector<int> ans;
for (int i = m; i <= n; i++) {
// If 'i' is prime, add it to the result list
if (isPrime[i])
ans.push_back(i);
}
return ans;
}
int main() {
int m = 1, n = 10;
vector<int> ans = primeRange(m, n);
for (auto &i : ans)
cout << i << " ";
return 0;
}
// Java program to find the prime numbers
// between a given interval
import java.util.*;
class GfG {
// Function to implement the
// Sieve of Eratosthenes to find primes up to 'n'
static boolean[] sieveOfEratosthenes(int n) {
// Create a boolean array "prime[0..n]"
// and initialize all entries as true.
// A value in prime[i] will be false
// if 'i' is not prime, otherwise true.
boolean[] prime = new boolean[n + 1];
Arrays.fill(prime, true);
// Mark 0 and 1 as non-prime
prime[0] = false;
prime[1] = false;
// Loop through numbers from 2 to sqrt(n)
// to mark their multiples as non-prime
for (int p = 2; p * p <= n; p++) {
// If prime[p] is still true, it means 'p' is
// prime
if (prime[p]) {
// Mark all multiples of p greater
// than or equal to p^2 as non-prime
// Numbers less than p^2 would
// have already been marked as non-prime
for (int i = p * p; i <= n; i += p)
prime[i] = false;
}
}
return prime;
}
static int[] primeRange(int m, int n) {
// Get the boolean array representing prime numbers
// up to n
boolean[] isPrime = sieveOfEratosthenes(n);
// Count the number of primes in the range [m, n]
int count = 0;
for (int i = m; i <= n; i++) {
if (isPrime[i])
count++;
}
// Create an array to store the prime numbers
int[] ans = new int[count];
int index = 0;
// Loop through the range [m, n] and collect all
// prime numbers
for (int i = m; i <= n; i++) {
if (isPrime[i]) {
ans[index++] = i;
}
}
return ans;
}
public static void main(String[] args) {
int m = 1, n = 10;
int[] ans = primeRange(m, n);
for (int i : ans)
System.out.print(i + " ");
}
}
# Python program to find the prime numbers
# between a given interval
# Function to implement the
# Sieve of Eratosthenes to find primes up to 'n'
def sieveOfEratosthenes(n):
# Create a boolean array "prime[0..n]"
# and initialize all entries as true.
# A value in prime[i] will be false
# if 'i' is not prime, otherwise true.
prime = [True] * (n + 1)
# Mark 0 and 1 as non-prime
prime[0] = False
prime[1] = False
# Loop through numbers from 2 to sqrt(n)
# to mark their multiples as non-prime
for p in range(2, int(n**0.5) + 1):
# If prime[p] is still true, it means 'p' is prime
if prime[p] == True:
# Mark all multiples of p greater
# than or equal to p^2 as non-prime
# Numbers less than p^2 would
# have already been marked as non-prime
for i in range(p * p, n + 1, p):
prime[i] = False
return prime
# Function to find all prime numbers in the range [m, n]
def primeRange(m, n):
# Get the boolean array representing prime
# numbers up to n
isPrime = sieveOfEratosthenes(n)
ans = []
# Loop through the range [m, n] and collect
# all prime numbers
for i in range(m, n + 1):
# If 'i' is prime, add it to the result list
if isPrime[i]:
ans.append(i)
return ans
m, n = 1, 10
ans = primeRange(m, n)
for i in ans:
print(i, end=" ")
// C# program to find the prime numbers
// between a given interval
using System;
class GfG {
// Function to implement the
// Sieve of Eratosthenes to find primes up to 'n'
static bool[] sieveOfEratosthenes(int n) {
// Create a boolean array "prime[0..n]"
// and initialize all entries as true.
// A value in prime[i] will be false
// if 'i' is not prime, otherwise true.
bool[] prime = new bool[n + 1];
for (int i = 0; i <= n; i++)
prime[i] = true;
// Mark 0 and 1 as non-prime
prime[0] = false;
prime[1] = false;
// Loop through numbers from 2 to sqrt(n)
// to mark their multiples as non-prime
for (int p = 2; p * p <= n; p++) {
// If prime[p] is still true, it means 'p' is
// prime
if (prime[p]) {
// Mark all multiples of p greater
// than or equal to p^2 as non-prime
// Numbers less than p^2 would
// have already been marked as non-prime
for (int i = p * p; i <= n; i += p)
prime[i] = false;
}
}
return prime;
}
// Function to find all prime numbers in the range [m,
// n]
static int[] primeRange(int m, int n) {
// Get the boolean array representing prime numbers
// up to n
bool[] isPrime = sieveOfEratosthenes(n);
// Count the number of primes in the range [m, n]
int count = 0;
for (int i = m; i <= n; i++) {
if (isPrime[i])
count++;
}
// Create an array to store the prime numbers
int[] ans = new int[count];
int index = 0;
// Loop through the range [m, n] and collect all
// prime numbers
for (int i = m; i <= n; i++) {
if (isPrime[i]) {
ans[index++] = i;
}
}
return ans;
}
static void Main() {
int m = 1, n = 10;
int[] ans = primeRange(m, n);
foreach(int i in ans) Console.Write(i + " ");
}
}
// JavaScript program to find the prime numbers
// between a given interval
// Function to implement the
// Sieve of Eratosthenes to find primes up to 'n'
function sieveOfEratosthenes(n) {
// Create a boolean array "prime[0..n]"
// and initialize all entries as true.
// A value in prime[i] will be false
// if 'i' is not prime, otherwise true.
let prime = new Array(n + 1).fill(true);
// Mark 0 and 1 as non-prime
prime[0] = false;
prime[1] = false;
// Loop through numbers from 2 to sqrt(n)
// to mark their multiples as non-prime
for (let p = 2; p * p <= n; p++) {
// If prime[p] is still true, it means 'p' is prime
if (prime[p] === true) {
// Mark all multiples of p greater
// than or equal to p^2 as non-prime
// Numbers less than p^2 would
// have already been marked as non-prime
for (let i = p * p; i <= n; i += p)
prime[i] = false;
}
}
return prime;
}
// Function to find all prime numbers in
// the range [m, n]
function primeRange(m, n) {
// Get the boolean array representing prime numbers up
// to n
let isPrime = sieveOfEratosthenes(n);
let ans = [];
// Loop through the range [m, n] and collect all prime
// numbers
for (let i = m; i <= n; i++) {
// If 'i' is prime, add it to the result list
if (isPrime[i])
ans.push(i);
}
return ans;
}
let m = 1, n = 10;
let ans = primeRange(m, n);
console.log(ans.join(" "));
Output
2 3 5 7