Highest and Smallest power of K less than and greater than equal to N respectively

Given positive integers N and K, the task is to find the highest and smallest power of K greater than equal to and less than equal to N respectively.

Examples:

Input: N = 3, K = 2
Output: 2 4
Highest power of 2 less than 3 = 2
Smallest power of 2 greater than 3 = 4



Input: N = 6, K = 3
Output: 3 9
Highest power of 3 less than 6 = 2
Smallest power of 3 greater than 6 = 9

Approach:

  1. Compute the log of N in base K (logK N) to get the exponential power such that K raised to this exponent is the Highest power of K less than equal to N.
  2. For the Smallest power of K less than equal to N, find the next power of K computed from the last step

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to return the highest power
// of k less than or equal to n
int prevPowerofK(int n, int k)
{
    int p = (int)(log(n) / log(k));
    return (int)pow(k, p);
}
  
// Function to return the smallest power
// of k greater than or equal to n
int nextPowerOfK(int n, int k)
{
    return prevPowerofK(n, k) * k;
}
  
// Function to print the result
void printResult(int n, int k)
{
    cout << prevPowerofK(n, k)
         << " " << nextPowerOfK(n, k)
         << endl;
}
  
// Driver code
int main()
{
    int n = 25, k = 3;
  
    printResult(n, k);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach
import java.io.*;
  
class GFG{
  
// Function to return the highest power
// of k less than or equal to n
static int prevPowerofK(int n, int k)
{
    int p = (int)(Math.log(n) / Math.log(k));
    return (int) Math.pow(k, p);
}
  
// Function to return the smallest power
// of k greater than or equal to n
static int nextPowerOfK(int n, int k)
{
    return prevPowerofK(n, k) * k;
}
  
// Function to print the result
static void printResult(int n, int k)
{
    System.out.println(prevPowerofK(n, k) + " "
                       nextPowerOfK(n, k));
}
  
// Driver Code
public static void main (String args[])
{
    int n = 25, k = 3;
    printResult(n, k);
}
}
  
// This code is contributed by shivanisinghss2110

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach
import math
  
# Function to return the highest power
# of k less than or equal to n
def prevPowerofK(n, k):
  
    p = int(math.log(n) / math.log(k))
    return int(math.pow(k, p))
  
# Function to return the smallest power
# of k greater than or equal to n
def nextPowerOfK(n, k):
  
    return prevPowerofK(n, k) * k
  
# Function to print the result
def printResult(n, k):
  
    print(prevPowerofK(n, k), nextPowerOfK(n, k))
  
# Driver code
n = 6
k = 3
  
printResult(n, k)
  
# This code is contributed by divyamohan123

chevron_right


Output:

9 27

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.