Open In App

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

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

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 = 3 
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++




// 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;
}
 
// This code is contributed by Sania Kumari Gupta


C




// C implementation of the approach
#include <math.h>
#include <stdio.h>
 
// 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)
{
    printf("%d %d\n", prevPowerofK(n, k), nextPowerOfK(n, k));
}
 
// Driver code
int main()
{
    int n = 25, k = 3;
    printResult(n, k);
    return 0;
}
 
// This code is contributed by Sania Kumari Gupta


Java




// 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


Python3




# 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


C#




// C# implementation of the approach
using System;
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)
{
    Console.WriteLine(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 gauravrajput1


Javascript




<script>
 
 
// Javascript implementation of the approach
 
// Function to return the highest power
// of k less than or equal to n
function prevPowerofK(n, k)
{
    var p = parseInt(Math.log(n) / Math.log(k));
    return parseInt(Math.pow(k, p));
}
 
// Function to return the smallest power
// of k greater than or equal to n
function nextPowerOfK(n, k)
{
    return prevPowerofK(n, k) * k;
}
 
// Function to print the result
function printResult(n, k)
{
    document.write(prevPowerofK(n, k)
         + " " + nextPowerOfK(n, k) + "<br>");
          
}
 
// Driver code
var n = 25, k = 3;
printResult(n, k);
 
 
</script>


Output: 

9 27

 

Time Complexity: O(logkn), as inbuilt pow function will cost O (logkn) time.

Auxiliary Space: O(1), as we are not using any extra space.



Last Updated : 18 Jul, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads