Given an integer D, the task is to find all the prime numbers having D digits.
Examples:
Input: D = 1
Output: 2 3 5 7
Input: D = 2
Output: 11 13 17 19 23 29 31 37 41 43 47 53 61 67 71 73 79 83 89 97
Approach: Numbers with D digits lie in the range [10(D – 1), 10D – 1]. So, check all the numbers in this interval and to check the number is prime or not, use Sieve of Eratosthenes to generate all the primes.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std;
const int sz = 1e5;
bool isPrime[sz + 1];
// Function for Sieve of Eratosthenes void sieve()
{ memset (isPrime, true , sizeof (isPrime));
isPrime[0] = isPrime[1] = false ;
for ( int i = 2; i * i <= sz; i++) {
if (isPrime[i]) {
for ( int j = i * i; j < sz; j += i) {
isPrime[j] = false ;
}
}
}
} // Function to print all the prime // numbers with d digits void findPrimesD( int d)
{ // Range to check integers
int left = pow (10, d - 1);
int right = pow (10, d) - 1;
// For every integer in the range
for ( int i = left; i <= right; i++) {
// If the current integer is prime
if (isPrime[i]) {
cout << i << " " ;
}
}
} // Driver code int main()
{ // Generate primes
sieve();
int d = 1;
findPrimesD(d);
return 0;
} |
Java
// Java implementation of the approach import java.util.*;
class GFG
{ static int sz = 100000 ;
static boolean isPrime[] = new boolean [sz + 1 ];
// Function for Sieve of Eratosthenes static void sieve()
{ for ( int i = 0 ; i <= sz; i++)
isPrime[i] = true ;
isPrime[ 0 ] = isPrime[ 1 ] = false ;
for ( int i = 2 ; i * i <= sz; i++)
{
if (isPrime[i])
{
for ( int j = i * i; j < sz; j += i)
{
isPrime[j] = false ;
}
}
}
} // Function to print all the prime // numbers with d digits static void findPrimesD( int d)
{ // Range to check integers
int left = ( int )Math.pow( 10 , d - 1 );
int right = ( int )Math.pow( 10 , d) - 1 ;
// For every integer in the range
for ( int i = left; i <= right; i++)
{
// If the current integer is prime
if (isPrime[i])
{
System.out.print(i + " " );
}
}
} // Driver code public static void main(String args[])
{ // Generate primes
sieve();
int d = 1 ;
findPrimesD(d);
} } // This code is contributed by Arnab Kundu |
Python 3
# Python 3 implementation of the approach from math import sqrt, pow
sz = 100005
isPrime = [ True for i in range (sz + 1 )]
# Function for Sieve of Eratosthenes def sieve():
isPrime[ 0 ] = isPrime[ 1 ] = False
for i in range ( 2 , int (sqrt(sz)) + 1 , 1 ):
if (isPrime[i]):
for j in range (i * i, sz, i):
isPrime[j] = False
# Function to print all the prime # numbers with d digits def findPrimesD(d):
# Range to check integers
left = int ( pow ( 10 , d - 1 ))
right = int ( pow ( 10 , d) - 1 )
# For every integer in the range
for i in range (left, right + 1 , 1 ):
# If the current integer is prime
if (isPrime[i]):
print (i, end = " " )
# Driver code if __name__ = = '__main__' :
# Generate primes
sieve()
d = 1
findPrimesD(d)
# This code is contributed by Surendra_Gangwar |
C#
// C# implementation of the approach using System;
class GFG
{ static int sz = 100000;
static bool []isPrime = new bool [sz + 1];
// Function for Sieve of Eratosthenes static void sieve()
{ for ( int i = 0; i <= sz; i++)
isPrime[i] = true ;
isPrime[0] = isPrime[1] = false ;
for ( int i = 2; i * i <= sz; i++)
{
if (isPrime[i])
{
for ( int j = i * i; j < sz; j += i)
{
isPrime[j] = false ;
}
}
}
} // Function to print all the prime // numbers with d digits static void findPrimesD( int d)
{ // Range to check integers
int left = ( int )Math.Pow(10, d - 1);
int right = ( int )Math.Pow(10, d) - 1;
// For every integer in the range
for ( int i = left; i <= right; i++)
{
// If the current integer is prime
if (isPrime[i])
{
Console.Write(i + " " );
}
}
} // Driver code static public void Main ()
{ // Generate primes
sieve();
int d = 1;
findPrimesD(d);
} } // This code is contributed by ajit. |
Javascript
<script> // Javascript implementation of the approach
let sz = 100000;
let isPrime = new Array(sz + 1);
isPrime.fill( false );
// Function for Sieve of Eratosthenes
function sieve()
{
for (let i = 0; i <= sz; i++)
isPrime[i] = true ;
isPrime[0] = isPrime[1] = false ;
for (let i = 2; i * i <= sz; i++)
{
if (isPrime[i])
{
for (let j = i * i; j < sz; j += i)
{
isPrime[j] = false ;
}
}
}
}
// Function to print all the prime
// numbers with d digits
function findPrimesD(d)
{
// Range to check integers
let left = Math.pow(10, d - 1);
let right = Math.pow(10, d) - 1;
// For every integer in the range
for (let i = left; i <= right; i++)
{
// If the current integer is prime
if (isPrime[i])
{
document.write(i + " " );
}
}
}
// Generate primes
sieve();
let d = 1;
findPrimesD(d);
// This code is contributed by suresh07. </script> |
Output:
2 3 5 7
Time Complexity: O(sqrt(105) + d)
Auxiliary Space: O(105)