Check if a given number can be represented in given a no. of digits in any base

Given a number and no. of digits to represent the number, find if given number can be represented in given no. of digits in any base from 2 to 32.

Examples :

Input: 8 4  
Output: Yes
Possible in base 2 as 8 in base 2 is 1000

Input: 8 2 
Output: Yes 
Possible in base 3 as 8 in base 3 is 22

Input: 8 3  
Output: No
Not possible in any base

We strongly recommend you to minimize your browser and try this yourself first.

The idea is to check all bases one by one starting from base 2 to base 32. How do we check for a given base? Following are simple steps.
1) IF number is smaller than base and digit is 1, then return true.
2) Else if digit is more than 1 and number is more than base, then remove the last digit from num by doing num/base, reduce the number of digits and recur.
3) Else return false

Below is the implementation of above idea.

C++

// C++ program to check if a given number can be
// represented in given number of digits in any base
#include <iostream>
using namespace std;
  
// Returns true if 'num' can be represented usind 'dig'
// digits in 'base'
bool checkUtil(int num, int dig, int base)
{
    // Base case
    if (dig==1 && num < base)
       return true;
  
    // If there are more than 1 digits left and number
    // is more than base, then remove last digit by doing
    // num/base, reduce the number of digits and recur
    if (dig > 1 && num >= base)
       return checkUtil(num/base, --dig, base);
  
    return false;
}
  
// return true of num can be represented in 'dig'
// digits in any base from 2 to 32
bool check(int num, int dig)
{
    // Check for all bases one by one
    for (int base=2; base<=32; base++)
       if (checkUtil(num, dig, base))
            return true;
    return false;
}
  
// Driver program
int main()
{
    int num = 8;
    int dig = 3;
    (check(num, dig))? cout << "Yes" : cout << "No";
    return 0;
}

Java

// Java program to check if a 
// given number can be represented 
// in given number of digits in any base
class GFG
{
    // Returns true if 'num' can be 
    // represented usind 'dig' digits in 'base'
    static boolean checkUtil(int num, int dig, int base)
    {
        // Base case
        if (dig==1 && num < base)
        return true;
      
        // If there are more than 1 digits
        // left and number is more than base,
        // then remove last digit by doing num/base,
        //  reduce the number of digits and recur
        if (dig > 1 && num >= base)
        return checkUtil(num / base, --dig, base);
      
        return false;
    }
      
    // return true of num can be 
    // represented in 'dig' digits 
    // in any base from 2 to 32
    static boolean check(int num, int dig)
    {
        // Check for all bases one by one
        for (int base = 2; base <= 32; base++)
        if (checkUtil(num, dig, base))
                return true;
        return false;
    
      
    // Driver code
    public static void main (String[] args)
    {
        int num = 8;
        int dig = 3;
        if(check(num, dig))
            System.out.print("Yes");
        else
            System.out.print("No");
    }
}
  
// This code is contributed by Anant Agarwal.

Python3

# Python program to check
# if a given number can be
# represented in given number
# of digits in any base
  
# Returns true if 'num' can
# be represented using 'dig'
# digits in 'base'
def checkUtil(num,dig,base):
      
    # Base case
    if (dig==1 and num < base):
        return True
   
    # If there are more than 1
    # digits left and number
    # is more than base, then
    # remove last digit by doing
    # num/base, reduce the number
    # of digits and recur
    if (dig > 1 and num >= base):
        return checkUtil(num/base, --dig, base)
   
    return False
   
# return true of num can
# be represented in 'dig'
# digits in any base from 2 to 32
def check(num,dig):
  
    # Check for all bases one by one
    for base in range(2,33):
  
        if (checkUtil(num, dig, base)):
            return True
    return False
  
# driver code
num = 8
dig = 3
if(check(num, dig)==True):
    print("Yes")
else:
    print("No")
  
# This code is contributed
# by Anant Agarwal.

C#

// C# program to check if a given 
// number can be represented in 
// given number of digits in any base
using System;
  
class GFG {
      
    // Returns true if 'num' can be 
    // represented usind 'dig' digits
    // in 'base'
    static bool checkUtil(int num, int dig,
                          int i)
    {
          
        // Base case
        if (dig == 1 && num < i)
        return true;
      
        // If there are more than 1 digits
        // left and number is more than base,
        // then remove last digit by doing 
        // num/base, reduce the number of 
        // digits and recur
        if (dig > 1 && num >= i)
        return checkUtil((num / i), --dig, i);
      
        return false;
    }
      
    // return true of num can be 
    // represented in 'dig' digits 
    // in any base from 2 to 32
    static bool check(int num, int dig)
    {
          
        // Check for all bases one by one
        for (int i = 2; i <= 32; i++)
        if (checkUtil(num, dig, i))
                return true;
        return false;
    
      
    // Driver code
    public static void Main()
    {
        int num = 8;
        int dig = 3;
        if(check(num, dig))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
  
// This code is contributed by Sam007.

PHP

<?php
// PHP program to check if a given
// number can be represented in given
// number of digits in any base
  
// Returns true if 'num' can be
// represented usind 'dig'
// digits in 'base'
  
function checkUtil($num, $dig, $base)
{
    // Base case
    if ($dig == 1 && $num < $base)
    return true;
  
    // If there are more than 1 
    // digits left and number is 
    // more than base, then remove
    // last digit by doing num/base,
    // reduce the number of digits and recur
    if ($dig > 1 && $num >= $base)
    return checkUtil($num / $base
                   --$dig, $base);
  
    return false;
}
  
// return true of num can be 
// represented in 'dig' digits 
// in any base from 2 to 32
function check($num, $dig)
{
    // Check for all bases one by one
    for ($base = 2; $base <= 32; $base++)
    if (checkUtil($num, $dig, $base))
            return true;
    return false;
}
  
// Driver Code
$num = 8;
$dig = 3;
if (check($num, $dig) == true)
echo "Yes" ;
else
echo "No";
  
// This code is contributed by ajit
?>

Output :

No

This article is contributed by Mehboob Elahi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above



My Personal Notes arrow_drop_up

Improved By : Sam007, jit_t




Practice Tags :
Article Tags :

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.

Recommended Posts:



2 Average Difficulty : 2/5.0
Based on 1 vote(s)






User Actions