Skip to content
Related Articles

Related Articles

Java Program to Implement wheel Sieve to Generate Prime Numbers Between Given Range
  • Last Updated : 04 Dec, 2020

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 + " ");
            }
        }
    }
}

chevron_right


Output



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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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();
  
        // priting the prime numbers in range
        range(L, R);
    }
}

chevron_right


Output

23 29 31 37

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 + " ");
            }
        }
    }
}

chevron_right


Output

11 13 17 19

Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :