Queries for the smallest and the largest prime number of given digit

Given Q queries where every query consists of an integer D, the task is to find the smallest and the largest prime number with D digits. If no such prime number exists then print -1.

Examples:

Input: Q[] = {2, 5}
Output:
11 97
10007 99991

Input: Q[] = {4, 3, 1}
Output:
1009 9973
101 997
1 7

Approach:

  1. D digit numbers start from 10(D – 1) and end at 10D – 1.
  2. Now, the task is to find the smallest and the largest prime number from this range.
  3. To answer a number of queries for prime numbers, Sieve of Eratosthenes can be used to answer whether a number is prime or not.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
  
#define MAX 100000
  
bool prime[MAX + 1];
  
void SieveOfEratosthenes()
{
  
    // 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.
    memset(prime, true, sizeof(prime));
  
    for (int p = 2; p * p <= MAX; p++) {
  
        // If prime[p] is not changed, then it is a prime
        if (prime[p] == true) {
  
            // Update all multiples of p greater than or
            // equal to the square of it
            // numbers which are multiple of p and are
            // less than p^2 are already been marked.
            for (int i = p * p; i <= MAX; i += p)
                prime[i] = false;
        }
    }
}
  
// Function to return the smallest prime
// number with d digits
int smallestPrime(int d)
{
    int l = pow(10, d - 1);
    int r = pow(10, d) - 1;
    for (int i = l; i <= r; i++) {
  
        // check if prime
        if (prime[i]) {
            return i;
        }
    }
    return -1;
}
  
// Function to return the largest prime
// number with d digits
int largestPrime(int d)
{
    int l = pow(10, d - 1);
    int r = pow(10, d) - 1;
    for (int i = r; i >= l; i--) {
  
        // check if prime
        if (prime[i]) {
            return i;
        }
    }
    return -1;
}
  
// Driver code
int main()
{
    SieveOfEratosthenes();
  
    int queries[] = { 2, 5 };
    int q = sizeof(queries) / sizeof(queries[0]);
  
    // Perform queries
    for (int i = 0; i < q; i++) {
        cout << smallestPrime(queries[i]) << " "
             << largestPrime(queries[i]) << endl;
    }
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach
import java.util.*;
  
class GFG 
{
static int MAX = 100000;
  
static boolean []prime = new boolean[MAX + 1];
  
static void SieveOfEratosthenes()
{
  
    // 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.
    for (int i = 0; i < MAX + 1; i++)
    {
        prime[i] = true;
    }
    for (int p = 2; p * p <= MAX; p++) 
    {
  
        // If prime[p] is not changed,
        // then it is a prime
        if (prime[p] == true
        {
  
            // Update all multiples of p greater than or
            // equal to the square of it
            // numbers which are multiple of p and are
            // less than p^2 are already been marked.
            for (int i = p * p; i <= MAX; i += p)
                prime[i] = false;
        }
    }
}
  
// Function to return the smallest prime
// number with d digits
static int smallestPrime(int d)
{
    int l = (int) Math.pow(10, d - 1);
    int r = (int) Math.pow(10, d) - 1;
    for (int i = l; i <= r; i++)
    {
  
        // check if prime
        if (prime[i])
        {
            return i;
        }
    }
    return -1;
}
  
// Function to return the largest prime
// number with d digits
static int largestPrime(int d)
{
    int l = (int) Math.pow(10, d - 1);
    int r = (int) Math.pow(10, d) - 1;
    for (int i = r; i >= l; i--) 
    {
  
        // check if prime
        if (prime[i])
        {
            return i;
        }
    }
    return -1;
}
  
// Driver code
public static void main(String[] args) 
{
    SieveOfEratosthenes();
  
    int queries[] = { 2, 5 };
    int q = queries.length;
  
    // Perform queries
    for (int i = 0; i < q; i++)
    {
        System.out.println(smallestPrime(queries[i]) + " "
                           largestPrime(queries[i]));
    }
}
  
// This code is contributed by Rajput-Ji

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach 
from math import sqrt
  
MAX = 100000
  
# 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] * (MAX + 1)
  
def SieveOfEratosthenes() : 
  
    for p in range(2, int(sqrt(MAX)) + 1) : 
  
        # If prime[p] is not changed,
        # then it is a prime 
        if (prime[p] == True) :
  
            # Update all multiples of p greater than or 
            # equal to the square of it 
            # numbers which are multiple of p and are 
            # less than p^2 are already been marked. 
            for i in range(p * p, MAX + 1, p) :
                prime[i] = False
  
# Function to return the smallest prime 
# number with d digits 
def smallestPrime(d) : 
  
    l = 10 ** (d - 1); 
    r = (10 ** d) - 1
    for i in range(l, r + 1) : 
  
        # check if prime 
        if (prime[i]) :
            return i; 
  
    return -1
  
# Function to return the largest prime 
# number with d digits 
def largestPrime(d) : 
  
    l = 10 ** (d - 1); 
    r = (10 ** d) - 1
    for i in range(r, l , -1) :
  
        # check if prime 
        if (prime[i]) :
            return i; 
              
    return -1
  
# Driver code 
if __name__ == "__main__"
  
    SieveOfEratosthenes(); 
  
    queries = [ 2, 5 ]; 
    q = len(queries); 
  
    # Perform queries 
    for i in range(q) :
        print(smallestPrime(queries[i]), " ",
              largestPrime(queries[i])); 
  
# This code is contributed by AnkitRai01

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach
using System;
      
class GFG 
{
static int MAX = 100000;
  
static bool []prime = new bool[MAX + 1];
  
static void SieveOfEratosthenes()
{
  
    // 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.
    for (int i = 0; i < MAX + 1; i++)
    {
        prime[i] = true;
    }
    for (int p = 2; p * p <= MAX; p++) 
    {
  
        // If prime[p] is not changed,
        // then it is a prime
        if (prime[p] == true
        {
  
            // Update all multiples of p greater than 
            // or equal to the square of it
            // numbers which are multiple of p and are
            // less than p^2 are already been marked.
            for (int i = p * p; i <= MAX; i += p)
                prime[i] = false;
        }
    }
}
  
// Function to return the smallest prime
// number with d digits
static int smallestPrime(int d)
{
    int l = (int) Math.Pow(10, d - 1);
    int r = (int) Math.Pow(10, d) - 1;
    for (int i = l; i <= r; i++)
    {
  
        // check if prime
        if (prime[i])
        {
            return i;
        }
    }
    return -1;
}
  
// Function to return the largest prime
// number with d digits
static int largestPrime(int d)
{
    int l = (int) Math.Pow(10, d - 1);
    int r = (int) Math.Pow(10, d) - 1;
    for (int i = r; i >= l; i--) 
    {
  
        // check if prime
        if (prime[i])
        {
            return i;
        }
    }
    return -1;
}
  
// Driver code
public static void Main(String[] args) 
{
    SieveOfEratosthenes();
  
    int []queries = { 2, 5 };
    int q = queries.Length;
  
    // Perform queries
    for (int i = 0; i < q; i++)
    {
        Console.WriteLine(smallestPrime(queries[i]) + " "
                           largestPrime(queries[i]));
    }
}
}
  
// This code is contributed by 29AjayKumar

chevron_right


Output:

11 97
10007 99991


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.