A prime number is a whole number greater than 1, which is only divisible by 1 and itself. The first few prime numbers are 2 3 5 7 11 13 17 19 23. Given a range, L to R, the task is to generate all the prime numbers that exist in the Range.
Examples
Input: 1 10 Output 2 3 5 7 Input: 20 30 Output: 23 29
Approach 1: Check every element whether the element is prime or not.
- Iterate in the Range L to R
- Check every element whether the element is prime or not
- Print the prime numbers in the range
Example
// Java Program to Implement wheel Sieve to Generate Prime // Numbers Between Given Range import java.io.*;
class GFG {
static boolean checkPrime( int n)
{
// Handling the edge case
if (n == 1 ) {
return false ;
}
for ( int i = 2 ; i <= Math.sqrt(n); ++i) {
// checking the prime number
if (n % i == 0 ) {
return false ;
}
}
return true ;
}
public static void main(String[] args)
{
// starting in a range
int L = 1 ;
// ending in a range
int R = 20 ;
for ( int i = L; i <= R; ++i) {
// printing the prime number
if (checkPrime(i) == true ) {
System.out.print(i + " " );
}
}
}
} |
2 3 5 7 11 13 17 19
- Time Complexity: O(n * sqrt(n))
- Space Complexity: O(1)
Approach 2: Using Sieve of Eratosthenes to Generate all the prime numbers
- Generate all the prime numbers using Sieve of Eratosthenes (Refer this article)
- Mark all the multiples of all prime numbers remaining numbers are left Prime numbers
- Till the maximum range of the Value
- Print all the prime numbers in the Given Range
Example
// Java Program to Implement wheel Sieve to Generate Prime // Numbers Between Given Range import java.io.*;
class GFG {
// Maximum range
static boolean max[] = new boolean [ 1000001 ];
static void fill()
{
// Maximum Range
int n = 1000000 ;
// Mark all numbers as a prime
for ( int i = 2 ; i <= n; ++i) {
max[i] = true ;
}
for ( int i = 2 ; i <= Math.sqrt(n); ++i) {
// if number is prime
if (max[i] == true ) {
// mark all the factors
// of i non prime
for ( int j = i * i; j <= n; j += i) {
max[j] = false ;
}
}
}
}
static void range( int L, int R)
{
for ( int i = L; i <= R; ++i) {
// checking the prime number
if (max[i] == true ) {
// print the prime number
System.out.print(i + " " );
}
}
}
public static void main(String[] args)
{
// starting in a range
int L = 20 ;
// ending in a range
int R = 40 ;
// mark all the numbers
fill();
// printing the prime numbers in range
range(L, R);
}
} |
23 29 31 37
- Time Complexity: O(nlog(logn)
- Space Complexity: O(1)
Approach 3: Using wheel Sieve to Generate all the Prime numbers. This approach is a very much optimized approach than discussed above approach. In this approach, we use the wheel Factorization method to find the prime numbers in a given range.
Example
// Java program to check if the // given number is prime using // Wheel Factorization Method import java.util.*;
class GFG {
// Function to check if a given
// number x is prime or not
static boolean isPrime( int N)
{
boolean isPrime = true ;
// The Wheel for checking
// prime number
int [] arr = { 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 };
// Base Case
if (N < 2 ) {
isPrime = false ;
}
// Check for the number taken
// as basis
if (N % 2 == 0 || N % 3 == 0 || N % 5 == 0 ) {
isPrime = false ;
}
// Check for Wheel
// Here i, acts as the layer
// of the wheel
for ( int i = 0 ; i < Math.sqrt(N); i += 30 ) {
// Check for the list of
// Sieve in arr[]
for ( int c : arr) {
// If number is greater
// than sqrt(N) break
if (c > Math.sqrt(N)) {
break ;
}
// Check if N is a multiple
// of prime number in the
// wheel
else {
if (N % (c + i) == 0 ) {
isPrime = false ;
break ;
}
}
// If at any iteration
// isPrime is false,
// break from the loop
if (!isPrime)
break ;
}
}
if (isPrime)
return true ;
else
return false ;
}
// Driver's Code
public static void main(String args[])
{
// Range
int L = 10 ;
int R = 20 ;
for ( int i = L; i <= R; ++i) {
// Function call for primality
// check
// if true
if (isPrime(i) == true ) {
// print the prime number
System.out.print(i + " " );
}
}
}
} |
11 13 17 19