Open In App

Print prime numbers from 1 to N in reverse order

Given a number N, print all prime number smaller than or equal to N in reverse order . 
For example, if N is 9, the output should be “7, 5, 3, 2”. 

Examples: 

Input :  N = 5
Output : 5 3 2

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

 

A simple solution is to traverse from N to 1. For every number, check if it is a prime using school method to check for prime. Print the number if it is prime.
An efficient solution is to use Sieve of Eratosthenes. We efficiently find all number from 1 to N, then print them.
 




// C++ program to print all primes between 1
// to N in reverse order using Sieve of
// Eratosthenes
#include <bits/stdc++.h>
using namespace std;
 
void Reverseorder(int n)
{
    // Create a boolean array "prime[0..n]" and
    // initialize all entries it as true. A value
    // in prime[i] will finally be false if i
    // is Not a prime, else true.
    bool prime[n + 1];
    memset(prime, true, sizeof(prime));
 
    for (int p = 2; p * p <= n; p++) {
 
        // If prime[p] is not changed, then
        // it is a prime
        if (prime[p] == true) {
 
            // Update all multiples of p
            for (int i = p * 2; i <= n; i += p)
                prime[i] = false;
        }
    }
 
    // Print all prime numbers in reverse order
    for (int p = n; p >= 2; p--)
        if (prime[p])
            cout << p << " ";
}
 
// Driver Program
int main()
{
    // static input
    int N = 25;
 
    // to display
    cout << "Prime number in reverse order" << endl;
 
    if (N == 1)
        cout << "No prime no exist in this range";
    else
        Reverseorder(N); // calling the function
 
    return 0;
}




// Java program to print all primes between 1
// to N in reverse order using Sieve of
// Eratosthenes
import java.io.*;
import java.util.*;
 
class GFG {
    static void reverseorder(int n)
    {
 
        // Create a boolean array "prime[0..n]" and
        // initialize all entries it as true. A value
        // in prime[i] will finally be false if i
        // is Not a prime, else true.
        boolean prime[] = new boolean[n + 1];
        for (int i = 0; i < n; i++)
            prime[i] = true;
 
        for (int p = 2; p * p <= n; p++) {
 
            // If prime[p] is not changed, then
            // it is a prime
            if (prime[p] == true) {
 
                // Update all multiples of p
                for (int i = p * 2; i <= n; i += p)
                    prime[i] = false;
            }
        }
 
        // Print all prime numbers
        for (int i = n; i >= 2; i--)
            if (prime[i] == true)
                System.out.print(i + " ");
    }
 
    // Driver Program to test above function
    public static void main(String args[])
    {
        // static input
        int N = 25;
        // To display
        System.out.println("Prime number in reverse order");
 
        if (N == 1)
            System.out.println("No prime no exist in this range");
        else
            reverseorder(N); // calling the function
    }
}




# Python3 program to print all primes
# between 1 to N in reverse order
# using Sieve of Eratosthenes
def Reverseorder(n):
 
    # Create a boolean array "prime[0..n]"
    # and initialize all entries it as true.
    # A value in prime[i] will finally be
    # false if i is Not a prime, else true.
    prime = [True] * (n + 1);
 
    p = 2;
    while(p * p <= n):
 
        # If prime[p] is not changed,
        # then it is a prime
        if (prime[p] == True):
 
            # Update all multiples of p
            for i in range((p * 2), (n + 1), p):
                prime[i] = False;
        p += 1;
 
    # Print all prime numbers in
    # reverse order
    for p in range(n, 1, -1):
        if (prime[p]):
            print(p, end = " ");
 
# Driver Code
 
# static input
N = 25;
 
# to display
print("Prime number in reverse order");
 
if (N == 1):
    print("No prime no exist in this range");
else:
    Reverseorder(N); # calling the function
 
# This code is contributed by mits




// C# program to print all primes between 1
// to N in reverse order using Sieve of
// Eratosthenes
using System;
 
class GFG {
 
    static void reverseorder(int n)
    {
 
        // Create a boolean array "prime[0..n]"
        // and initialize all entries it as
        // true. A value in prime[i] will
        // finally be false if i is Not a
        // prime, else true.
        bool []prime = new bool[n + 1];
         
        for (int i = 0; i < n; i++)
            prime[i] = true;
 
        for (int p = 2; p * p <= n; p++) {
 
            // If prime[p] is not changed,
            // then it is a prime
            if (prime[p] == true) {
 
                // Update all multiples of p
                for (int i = p * 2; i <= n;
                                     i += p)
                    prime[i] = false;
            }
        }
 
        // Print all prime numbers
        for (int i = n; i >= 2; i--)
            if (prime[i] == true)
                Console.Write(i + " ");
    }
     
    // Driver code
    public static void Main()
    {
         
        // static input
        int N = 25;
         
        // To display
        Console.WriteLine("Prime number in"
                       + " reverse order");
 
        if (N == 1)
            Console.WriteLine("No prime no"
                + " exist in this range");
        else
         
            // calling the function
            reverseorder(N);
    }
}
 
// This code is contributed by Sam007.




<?php
// PHP program to print all primes
// between 1 to N in reverse order
// using Sieve of Eratosthenes
 
function Reverseorder($n)
{
    // Create a boolean array "prime[0..n]"
    // and initialize all entries it as true.
    // A value in prime[i] will finally be
    // false if i is Not a prime, else true.
    $prime = array_fill(0, $n + 1, true);
 
    for ($p = 2; $p * $p <= $n; $p++)
    {
 
        // If prime[p] is not changed,
        // then it is a prime
        if ($prime[$p] == true)
        {
 
            // Update all multiples of p
            for ($i = $p * 2; $i <= $n; $i += $p)
                $prime[$i] = false;
        }
    }
 
    // Print all prime numbers in
    // reverse order
    for ($p = $n; $p >= 2; $p--)
        if ($prime[$p])
            echo $p." ";
}
 
// Driver Code
 
// static input
$N = 25;
 
// to display
echo "Prime number in reverse order\n";
 
if ($N == 1)
    echo "No prime no exist in this range";
else
    Reverseorder($N); // calling the function
 
// This code is contributed by mits
?>




<script>
 
// Javascript program to print all primes between 1
// to N in reverse order using Sieve of
// Eratosthenes
 
 
function Reverseorder( n)
{
    // Create a boolean array "prime[0..n]" and
    // initialize all entries it as true. A value
    // in prime[i] will finally be false if i
    // is Not a prime, else true.
     let prime = new Array(n + 1);
        for (let i = 0; i < n; i++)
            prime[i] = true;
 
    for (let p = 2; p * p <= n; p++) {
 
        // If prime[p] is not changed, then
        // it is a prime
        if (prime[p] == true) {
 
            // Update all multiples of p
            for (let i = p * 2; i <= n; i += p)
                prime[i] = false;
        }
    }
 
    // Print all prime numbers in reverse order
    for (let p = n; p >= 2; p--)
        if (prime[p])
            document.write(p + " ");
}
 
// Driver Code
 
// static input
let N = 25;
 
// to display
document.write("Prime number in reverse order" + "</br>");
 
if (N == 1)
    document.write("No prime no exist in this range");
else
    Reverseorder(N); // calling the function
 
</script>

Output: 
Prime number in reverse order
23 19 17 13 11 7 5 3 2

 

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


Article Tags :