![]() |
VOOZH | about |
This program checks whether a number n can be expressed as power of k and if yes, then to what power should k be raised to make it n. Following example will clarify :
Examples:
Input : n = 16, k = 2 Output : yes : 4 Explanation : Answer is yes because 16 can be expressed as power of 2. Input : n = 27, k = 3 Output : yes : 3 Explanation : Answer is yes as 27 can be expressed as power of 3. Input : n = 20, k = 5 Output : No Explanation : Answer is No as 20 cannot be expressed as power of 5.
We have discussed two methods in below post
:Check if a number is a power of another number
In this post, a new Base Changing method is discussed.
In Base Changing Method, we simply change the base of number n to k and check if the first digit of Changed number is 1 and remaining all are zero.
Example for this : Let's take n = 16 and k = 2.
Change 16 to base 2. i.e. (10000)2. Since first digit is 1 and remaining are zero. Hence 16 can be expressed as power of 2. Count the length of (10000)2 and subtract 1 from it, that'll be the number to which 2 must be raised to make 16. In this case 5 - 1 = 4.
Another example : Let's take n = 20 and k = 3.
20 in base 3 is (202)3. Since there are two non-zero digit, hence 20 cannot be expressed as power of 3.
Output:
Yes
Time Complexity: O(logK n)
Space Complexity: O(1)
Optimized Approach:
This approach avoids the need to convert n to base k and check whether it can be represented using only the digits 0 and 1. It also avoids the need to track whether a 1 has already been seen. This results in a simpler and more efficient algorithm.
Here's a step-by-step explanation of the code:
OUTPUT:
YES
Time Complexity: O(logK n)
Space Complexity: O(1)