Finding nth number made of prime digits (2, 3, 5 and 7) only (original) (raw)

Last Updated : 23 Jul, 2025

Given a number 'n', find the nth number whose each digit is a prime number i.e 2, 3, 5, 7. . . In other words, find the nth number of this sequence. 2, 3, 5, 5, 22, 23......
Given that the nth number such found will be less than equal to 10^18

Examples :

Input: 10
Output: 3
Explanation: 2, 3, 5, 7, 22, 23, 25, 27, 32, 33

Input: 21
Output: 222

Try It Yourselfredirect icon

Finding the n-th number made of prime digits (2, 3, 5, and 7) using Mathematics:

There are four prime digits 2, 3, 5, and 7. The first observation is that the number of numbers of x length and made of prime digits are 4x because for each position you have 4 choices so the total number is 4^x. So the total count of such numbers whose length is = 1 to len (i.e. 2 or 3 or more) will be 4*((4len - 1)/3). (This is the sum of G.P with first term 4 and common ratio 4)

Follow the steps below to solve the problem:

Below is the implementation of the above steps:

C++ `

// C++ implementation for finding nth number // made of prime digits only #include <bits/stdc++.h> using namespace std;

// Prints n-th number where each digit is a // prime number void nthprimedigitsnumber(long long n) { // Finding the length of n-th number long long len = 1;

// Count of numbers with len-1 digits
long long prev_count = 0;
while (true) {
    // Count of numbers with i digits
    long long curr_count = prev_count + pow(4, len);

    // if i is the length of such number
    // then n<4*(4^(i-1)-1)/3 and n>= 4*(4 ^ i-1)/3
    // if a valid i is found break the loop
    if (prev_count < n && curr_count >= n)
        break;

    // check for i + 1
    len++;

    prev_count = curr_count;
}

// Till now we have covered 'prev_count' numbers

// Finding ith digit at ith place
for (int i = 1; i <= len; i++) {
    // j = 1 means 2 j = 2 means ...j = 4 means 7
    for (long long j = 1; j <= 4; j++) {
        // if prev_count + 4 ^ (len-i) is less
        // than n, increase prev_count by 4^(x-i)
        if (prev_count + pow(4, len - i) < n)
            prev_count += pow(4, len - i);

        // else print the ith digit and break
        else {
            if (j == 1)
                cout << "2";
            else if (j == 2)
                cout << "3";
            else if (j == 3)
                cout << "5";
            else if (j == 4)
                cout << "7";
            break;
        }
    }
}
cout << endl;

}

// Driver function int main() { nthprimedigitsnumber(10); nthprimedigitsnumber(21); return 0; }

Java

// Java implementation for finding nth number // made of prime digits only

import static java.lang.Math.pow;

class Test {

// Prints n-th number where each digit is a
// prime number
static void nthprimedigitsnumber(long n)
{
    // Finding the length of n-th number
    long len = 1;

    // Count of numbers with len-1 digits
    long prev_count = 0;
    while (true) {
        // Count of numbers with i digits
        long curr_count = (long)(prev_count + pow(4, len));

        // if i is the length of such number
        // then n<4*(4^(i-1)-1)/3 and n>= 4*(4 ^ i-1)/3
        // if a valid i is found break the loop
        if (prev_count < n && curr_count >= n)
            break;

        // check for i + 1
        len++;

        prev_count = curr_count;
    }

    // Till now we have covered 'prev_count' numbers

    // Finding ith digit at ith place
    for (int i = 1; i <= len; i++) {
        // j = 1 means 2 j = 2 means ...j = 4 means 7
        for (long j = 1; j <= 4; j++) {
            // if prev_count + 4 ^ (len-i) is less
            // than n, increase prev_count by 4^(x-i)
            if (prev_count + pow(4, len - i) < n)
                prev_count += pow(4, len - i);

            // else print the ith digit and break
            else {
                if (j == 1)
                    System.out.print("2");
                else if (j == 2)
                    System.out.print("3");
                else if (j == 3)
                    System.out.print("5");
                else if (j == 4)
                    System.out.print("7");
                break;
            }
        }
    }
    System.out.println();
}

// Driver method
public static void main(String args[])
{
    nthprimedigitsnumber(10);
    nthprimedigitsnumber(21);
}

}

Python3

Python3 implementation for

finding nth number made of

prime digits only

import math

Prints n-th number where

each digit is a prime number

def nthprimedigitsnumber(n):

# Finding the length
# of n-th number
len = 1;

# Count of numbers 
# with len-1 digits
prev_count = 0;
while(1): 
    
    # Count of numbers 
    # with i digits
    curr_count = (prev_count + 
                  math.pow(4, len));

    # if i is the length of such
    # number then n<4*(4^(i-1)-1)/3
    # and n>= 4*(4 ^ i-1)/3 if a valid
    # i is found break the loop
    if (prev_count < n and 
        curr_count >= n):
        break;

    # check for i + 1
    len += 1;

    prev_count = curr_count;

# Till now we have covered
# 'prev_count' numbers

# Finding ith digit at ith place
for i in range (1, len + 1):
    
    # j = 1 means 2 j = 2
    # means ...j = 4 means 7
    for j in range(1, 5): 
        
        # if prev_count + 4 ^ (len-i) 
        # is less than n, increase 
        # prev_count by 4^(x-i)
        if (prev_count + pow(4, len - i) < n):
            prev_count += pow(4, len - i);

        # else print the ith
        # digit and break
        else:
            if (j == 1):
                print("2", end = "");
            elif (j == 2):
                print("3", end = "");
            elif (j == 3):
                print("5", end = "");
            elif (j == 4):
                print("7", end = "");
            break;
print();

Driver Code

nthprimedigitsnumber(10); nthprimedigitsnumber(21);

This code is contributed by mits

C#

// C# implementation for finding nth // number made of prime digits only using System;

public class GFG {

// Prints n-th number where each 
// digit is a prime number
static void nthprimedigitsnumber(long n)
{
    // Finding the length of n-th number
    long len = 1;

    // Count of numbers with len-1 digits
    long prev_count = 0;
    while (true) {
        
        // Count of numbers with i digits
        long curr_count = (long)(prev_count + 
                           Math.Pow(4, len));

        // if i is the length of such number
        // then n<4*(4^(i-1)-1)/3 and n>= 4*(4 ^ i-1)/3
        // if a valid i is found break the loop
        if (prev_count < n && curr_count >= n)
            break;

        // check for i + 1
        len++;

        prev_count = curr_count;
    }

    // Till now we have covered 'prev_count' numbers

    // Finding ith digit at ith place
    for (int i = 1; i <= len; i++) {
        
        // j = 1 means 2 j = 2 means ...j = 4 means 7
        for (long j = 1; j <= 4; j++) {
            
            // if prev_count + 4 ^ (len-i) is less
            // than n, increase prev_count by 4^(x-i)
            if (prev_count + Math.Pow(4, len - i) < n)
                prev_count += (long)Math.Pow(4, len - i);

            // else print the ith digit and break
            else {
                if (j == 1)
                    Console.Write("2");
                else if (j == 2)
                    Console.Write("3");
                else if (j == 3)
                    Console.Write("5");
                else if (j == 4)
                    Console.Write("7");
                break;
            }
        }
    }
    Console.WriteLine();
}

// Driver method
public static void Main()
{
    nthprimedigitsnumber(10);
    nthprimedigitsnumber(21);
}

}

// This code is contributed by Sam007

PHP

currcount=curr_count = currcount=prev_count + pow(4, $len); // if i is the length of such // number then n<4*(4^(i-1)-1)/3 // and n>= 4*(4 ^ i-1)/3 if a valid // i is found break the loop if ($prev_count < $n && currcount>=curr_count >= currcount>=n) break; // check for i + 1 $len++; prevcount=prev_count = prevcount=curr_count; } // Till now we have covered // 'prev_count' numbers // Finding ith digit at ith place for ($i = 1; i<=i <= i<=len; $i++) { // j = 1 means 2 j = 2 // means ...j = 4 means 7 for ($j = 1; j<=4;j <= 4; j<=4;j++) { // if prev_count + 4 ^ (len-i) // is less than n, increase // prev_count by 4^(x-i) if ($prev_count + pow(4, len−len - leni) < $n) prevcount+=pow(4,prev_count += pow(4, prevcount+=pow(4,len - $i); // else print the ith // digit and break else { if ($j == 1) echo "2"; else if ($j == 2) echo "3"; else if ($j == 3) echo "5"; else if ($j == 4) echo "7"; break; } } } echo "\n"; } // Driver Code nthprimedigitsnumber(10); nthprimedigitsnumber(21); // This code is contributed by ajit ?>

JavaScript

`

Time Complexity: O(Constant), Length of digits in the worst case will be 18, to count numbers with len - 1 will take 18 operations and to calculate the nth it will take 18 * 4 = 72, so total operation will be 90 which is constant.
Auxiliary Space: O(1)

Approach 2:

The idea to make the nth number by identifying the below pattern:

/ | | \
2 3 5 7
/ | | \ / | | \ / | | \ / | | \
22 23 25 27 32 33 35 37 52 53 55 57 72 73 75 77
/||\/||\/||\/||\ /||\/||\/||\/||\ /||\/||\/||\/||\ /||\/||\/||\/||\
We can notice following :
1st. 5th, 9th. 13th, ..... numbers have 2 as last digit.
2nd. 6th, 10th. 14th, ..... numbers have 3 as last digit.
3rd. 7th, 11th. 15th, ..... numbers have 5 as last digit.
4th. 8th, 12th. 16th, ..... numbers have 7 as last digit.

Follow the steps below to solve the problem:

Below is the implementation of above approach:

C++ `

// CPP program to find n-th number with // prime digits 2, 3, 5 and 7 #include #include #include using namespace std;

string nthprimedigitsnumber(int number) { int rem; string num; while (number) { // remainder for check element position rem = number % 4; switch (rem) {

    // if number is 1st position in tree
    case 1:
        num.push_back('2');
        break;

    // if number is 2nd position in tree
    case 2:
        num.push_back('3');
        break;

    // if number is 3rd position in tree
    case 3:
        num.push_back('5');
        break;

    // if number is 4th position in tree
    case 0:
        num.push_back('7');
        break;
    }

    if (number % 4 == 0)
       number--;

    number = number / 4;
}
reverse(num.begin(), num.end());
return num;

}

// Driver code int main() { int number = 21; cout << nthprimedigitsnumber(10) << "\n"; cout << nthprimedigitsnumber(21) << "\n"; return 0; }

Java

// Java program to find n-th number with // prime digits 2, 3, 5 and 7 import java.util.*; class GFG{ static String nthprimedigitsnumber(int number) { int rem; String num=""; while (number>0) { // remainder for check element position rem = number % 4; switch (rem) {

    // if number is 1st position in tree 
    case 1: 
        num+='2'; 
        break; 

    // if number is 2nd position in tree 
    case 2: 
        num+='3'; 
        break; 

    // if number is 3rd position in tree 
    case 3: 
        num+='5'; 
        break; 

    // if number is 4th position in tree 
    case 0: 
        num+='7'; 
        break; 
    } 

   if (number % 4 == 0)
       number--;

    number = number / 4; 
} 

return new StringBuilder(num).reverse().toString(); 

}

// Driver code public static void main(String[] args) { int number = 21; System.out.println(nthprimedigitsnumber(10)); System.out.println(nthprimedigitsnumber(21)); } } // This code is contributed by mits

Python3

Python3 program to find n-th number

with prime digits 2, 3, 5 and 7

def nthprimedigitsnumber(number):

num = ""; 
while (number > 0): 
    
    # remainder for check element position 
    rem = number % 4; 
    
    # if number is 1st position in tree
    if (rem == 1):
        num += '2'; 

    # if number is 2nd position in tree 
    if (rem == 2): 
        num += '3'; 

    # if number is 3rd position in tree 
    if (rem == 3): 
        num += '5'; 

    # if number is 4th position in tree 
    if (rem == 0): 
        num += '7'; 

    if (number % 4 == 0):
        number = number - 1

    number = number // 4; 

return num[::-1]; 

Driver code

number = 21; print(nthprimedigitsnumber(10)); print(nthprimedigitsnumber(number));

This code is contributed by mits

C#

// C# program to find n-th number with // prime digits 2, 3, 5 and 7 using System; class GFG{ static string nthprimedigitsnumber(int number) { int rem; string num=""; while (number>0) { // remainder for check element position rem = number % 4; switch (rem) {

    // if number is 1st position in tree 
    case 1: 
        num+='2'; 
        break; 

    // if number is 2nd position in tree 
    case 2: 
        num+='3'; 
        break; 

    // if number is 3rd position in tree 
    case 3: 
        num+='5'; 
        break; 

    // if number is 4th position in tree 
    case 0: 
        num+='7'; 
        break; 
    } 

   if (number % 4 == 0)
       number--;

    number = number / 4; 
} 
char[] st = num.ToCharArray();
Array.Reverse(st);
return new string(st); 

}

// Driver code static void Main() { int number = 21; Console.WriteLine(nthprimedigitsnumber(10)); Console.WriteLine(nthprimedigitsnumber(number)); } } // This code is contributed by mits

PHP

0) { // remainder for check element position rem=rem = rem=number % 4; switch ($rem) { // if number is 1st position in tree case 1: $num .= '2'; break; // if number is 2nd position in tree case 2: $num .= '3'; break; // if number is 3rd position in tree case 3: $num .= '5'; break; // if number is 4th position in tree case 0: $num .= '7'; break; } if ($number % 4 == 0) $number--; number=(int)(number = (int)(number=(int)(number / 4); } return strrev($num); } // Driver code $number = 21; print(nthprimedigitsnumber(10) . "\n"); print(nthprimedigitsnumber($number)); // This code is contributed by mits ` JavaScript ` ` **Time Complexity:** O(log4(N)), Looping till the Nth number becomes zero which is reducing by 4 every time. **Auxiliary Space:** O(1)