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:
- D digit numbers start from 10(D – 1) and end at 10D – 1.
- Now, the task is to find the smallest and the largest prime number from this range.
- 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++
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std;#define MAX 100000bool 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 digitsint 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 digitsint 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 codeint 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;} |
Java
// Java implementation of the approachimport 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 digitsstatic 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 digitsstatic 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 codepublic 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 |
Python3
# Python3 implementation of the approach from math import sqrtMAX = 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 |
C#
// C# implementation of the approachusing 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 digitsstatic 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 digitsstatic 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 codepublic 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 |
Javascript
<script>// Javascript implementation of the approachconst 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.let prime = new Array(MAX + 1).fill(true);function SieveOfEratosthenes(){ for (let 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 (let i = p * p; i <= MAX; i += p) prime[i] = false; } }}// Function to return the smallest prime// number with d digitsfunction smallestPrime(d){ let l = Math.pow(10, d - 1); let r = Math.pow(10, d) - 1; for (let i = l; i <= r; i++) { // check if prime if (prime[i]) { return i; } } return -1;}// Function to return the largest prime// number with d digitsfunction largestPrime(d){ let l = Math.pow(10, d - 1); let r = Math.pow(10, d) - 1; for (let i = r; i >= l; i--) { // check if prime if (prime[i]) { return i; } } return -1;}// Driver code SieveOfEratosthenes(); let queries = [ 2, 5 ]; let q = queries.length; // Perform queries for (let i = 0; i < q; i++) { document.write(smallestPrime(queries[i]) + " " + largestPrime(queries[i]) + "<br>"); }</script> |
11 97 10007 99991
Time Complexity: O(MAX*log(log(MAX)) + q*(r – l))
Auxiliary Space: O(MAX)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Here you can find 80728 more Info to that Topic: geeksforgeeks.org/queries-for-the-smallest-and-the-largest-prime-number-of-given-digit/ […]
… [Trackback]
[…] Read More Information here to that Topic: geeksforgeeks.org/queries-for-the-smallest-and-the-largest-prime-number-of-given-digit/ […]
… [Trackback]
[…] Find More to that Topic: geeksforgeeks.org/queries-for-the-smallest-and-the-largest-prime-number-of-given-digit/ […]
… [Trackback]
[…] Info to that Topic: geeksforgeeks.org/queries-for-the-smallest-and-the-largest-prime-number-of-given-digit/ […]