Check if a number N can be expressed in base B
Given a number N and any base B. The task is to check if N can be expressed in the form a1*b0 + a2*b1 + a3*b2 + ….+ a101*b100 where each coefficients a1, a2, a3…a101 are either 0, 1 or -1.
Examples:
Input: B = 3, N = 7
Output: Yes
Explanation:
The number 7 can be expressed as 1 * 30 + (-1) * 31 + 1 * 32 = 1 – 3 + 9.Input: B = 100, N = 50
Output: No
Explanation:
There is no possible way to express the number.
Approach: Below are the steps:
- If the base B representation of N consists of only 0s and 1s then the answer exists.
- If the above condition isn’t satisfied, then iterate from lower digit to higher ones and if the digit is not equal to 0 or 1, then try to subtract the appropriate power of B from it and increment higher digit.
- If it becomes equal to -1, then we can subtract this power digit, if it becomes equal to 0, then simply ignore, in other cases, representing the number in the required form is not possible.
Below is the implementation for the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to check if a number // N can be expressed in base B bool check( int n, int w) { vector< int > a(105); int p = 0; // Check if n is greater than 0 while (n > 0) { a[p++] = n % w; n /= w; } // Initialize a boolean variable bool flag = true ; for ( int i = 0; i <= 100; i++) { // Check if digit is 0 or 1 if (a[i] == 0 || a[i] == 1) continue ; // Subtract the appropriate // power of B from it and // increment higher digit else if (a[i] == w || a[i] == w - 1) a[i + 1]++; else flag = false ; } return flag; } // Driver Code int main() { // Given Number N and base B int B = 3, N = 7; // Function Call if (check(N, B)) cout << "Yes" ; else cout << "No" ; return 0; } |
Java
// Java program for the above approach class GFG{ // Function to check if a number // N can be expressed in base B static boolean check( int n, int w) { int [] a = new int [ 105 ]; int p = 0 ; // Check if n is greater than 0 while (n > 0 ) { a[p++] = n % w; n /= w; } // Initialize a boolean variable boolean flag = true ; for ( int i = 0 ; i <= 100 ; i++) { // Check if digit is 0 or 1 if (a[i] == 0 || a[i] == 1 ) continue ; // Subtract the appropriate // power of B from it and // increment higher digit else if (a[i] == w || a[i] == w - 1 ) a[i + 1 ]++; else flag = false ; } return flag; } // Driver Code public static void main(String[] args) { // Given number N and base B int B = 3 , N = 7 ; // Function call if (check(N, B)) System.out.print( "Yes" ); else System.out.print( "No" ); } } // This code is contributed by gauravrajput1 |
Python3
# Python3 program for the above approach # Function to check if a number # N can be expressed in base B def check(n, w): a = [ 0 for i in range ( 105 )]; p = 0 # Check if n is greater than 0 while (n > 0 ): a[p] = n % w p + = 1 n / / = w # Initialize a boolean variable flag = True for i in range ( 101 ): # Check if digit is 0 or 1 if (a[i] = = 0 or a[i] = = 1 ): continue # Subtract the appropriate # power of B from it and # increment higher digit elif (a[i] = = w or a[i] = = w - 1 ): a[i + 1 ] + = 1 else : flag = False return flag # Driver code if __name__ = = "__main__" : # Given number N and base B B = 3 N = 7 # Function call if (check(N, B)): print ( "Yes" ) else : print ( "No" ) # This code is contributed by rutvik_56 |
C#
// C# program for the above approach using System; class GFG{ // Function to check if a number // N can be expressed in base B static bool check( int n, int w) { int [] a = new int [105]; int p = 0; // Check if n is greater than 0 while (n > 0) { a[p++] = n % w; n /= w; } // Initialize a bool variable bool flag = true ; for ( int i = 0; i <= 100; i++) { // Check if digit is 0 or 1 if (a[i] == 0 || a[i] == 1) continue ; // Subtract the appropriate // power of B from it and // increment higher digit else if (a[i] == w || a[i] == w - 1) a[i + 1]++; else flag = false ; } return flag; } // Driver Code public static void Main(String[] args) { // Given number N and base B int B = 3, N = 7; // Function call if (check(N, B)) Console.Write( "Yes" ); else Console.Write( "No" ); } } // This code is contributed by amal kumar choubey |
Javascript
<script> // javascript program for the above approach // Function to check if a number // N can be expressed in base B function check(n , w) { var a = Array(105).fill(0); var p = 0; // Check if n is greater than 0 while (n > 0) { a[p++] = n % w; n /= w; n = parseInt(n); } // Initialize a boolean variable var flag = true ; for (i = 0; i <= 100; i++) { // Check if digit is 0 or 1 if (a[i] == 0 || a[i] == 1) continue ; // Subtract the appropriate // power of B from it and // increment higher digit else if (a[i] == w || a[i] == w - 1) a[i + 1]++; else flag = false ; } return flag; } // Driver Code // Given number N and base B var B = 3, N = 7; // Function call if (check(N, B)) document.write( "Yes" ); else document.write( "No" ); // This code is contributed by gauravrajput1 </script> |
Output:
Yes
Time Complexity: O(logBN)
Auxiliary Space: O(1)
Please Login to comment...