Count Numbers with Floor kth Root as n

Last Updated : 14 Aug, 2026

Given two integers n and k, find how many integers x satisfy the condition that the integral part (floor value) of the kth root of x is n.

Examples:

Input: n = 3, k = 2
Output: 7
Explanation: 9, 10, 11, 12, 13, 14, 15 have 3 as integral part of there square root.

Input: n = 2, k = 3
Output: 19
Explanation: 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 have 2 as integral part of there cube root.

Try It Yourself
redirect icon

[Naive Approach] Directly Count Valid Integers - O(k + ((n + 1) ^ k - n ^ k)) Time and O(1) Space

The idea is to find the range of values of x whose kth root has integral part n, and then count every value in that range one by one. The valid range is from n^k to (n + 1)^k - 1.

Working of Approach:

  • Calculate n^k as the starting value.
  • Calculate (n + 1)^k as the upper boundary.
  • Iterate from n^k to (n + 1)^k - 1.
  • Count every integer in this range.
  • Return the total count.
C++
#include <iostream>
using namespace std;

int integralRoot(int n, int k)
{

    // Calculate n^k.
    int left = 1;
    for (int i = 0; i < k; i++)
        left *= n;

    // Calculate (n + 1)^k.
    int right = 1;
    for (int i = 0; i < k; i++)
        right *= (n + 1);

    // Count every integer in the valid range.
    int cnt = 0;
    for (int x = left; x < right; x++)
        cnt++;

    return cnt;
}

int main()
{

    int n = 2, k = 3;

    cout << integralRoot(n, k) << endl;

    return 0;
}
Java
import java.util.Scanner;

public class GFG {
    // Calculate n^k.
    public static int integralRoot(int n, int k)
    {
        int left = 1;
        for (int i = 0; i < k; i++)
            left *= n;

        // Calculate (n + 1)^k.
        int right = 1;
        for (int i = 0; i < k; i++)
            right *= (n + 1);

        // Count every integer in the valid range.
        int cnt = 0;
        for (int x = left; x < right; x++)
            cnt++;

        return cnt;
    }

    public static void main(String[] args)
    {
        int n = 2, k = 3;
        System.out.println(integralRoot(n, k));
    }
}
Python
def integralRoot(n, k):

    # Calculate n^k.
    left = 1
    for i in range(k):
        left *= n

    # Calculate (n + 1)^k.
    right = 1
    for i in range(k):
        right *= (n + 1)

    # Count every integer in the valid range.
    cnt = 0
    for x in range(left, right):
        cnt += 1

    return cnt


if __name__ == '__main__':
    n = 2
    k = 3
    print(integralRoot(n, k))
C#
using System;

public class GFG {
    // Calculate n^k.
    public static int integralRoot(int n, int k)
    {
        int left = 1;
        for (int i = 0; i < k; i++)
            left *= n;

        // Calculate (n + 1)^k.
        int right = 1;
        for (int i = 0; i < k; i++)
            right *= (n + 1);

        // Count every integer in the valid range.
        int cnt = 0;
        for (int x = left; x < right; x++)
            cnt++;

        return cnt;
    }

    public static void Main()
    {
        int n = 2, k = 3;
        Console.WriteLine(integralRoot(n, k));
    }
}
JavaScript
function integralRoot(n, k)
{

    // Calculate n^k.
    let left = 1;
    for (let i = 0; i < k; i++)
        left *= n;

    // Calculate (n + 1)^k.
    let right = 1;
    for (let i = 0; i < k; i++)
        right *= (n + 1);

    // Count every integer in the valid range.
    let cnt = 0;
    for (let x = left; x < right; x++)
        cnt++;

    return cnt;
}

// Driver Code
let n = 2, k = 3;
console.log(integralRoot(n, k));

Output
19

[Expected Approach] Using Binary Exponentiation - O(log k) Time and O(1) Space

The idea is to observe that floor(kth root(x)) = n when n^k <= x < (n + 1)^k. Therefore, the number of valid integers is simply (n + 1)^k - n^k. We calculate both powers efficiently using binary exponentiation.

Working of Approach:

  • Calculate n^k using binary exponentiation.
  • Calculate (n + 1)^k using binary exponentiation.
  • All valid values of x lie between these two values.
  • The number of integers in this range is right - left.
  • Return this difference as the answer.

Let us understand with an example:
Input: n = 2, k = 3

  • Calculate left = power(2, 3) = 8 and right = power(3, 3) = 27.
  • power(2, 3) uses binary exponentiation and gives 8.
  • power(3, 3) uses binary exponentiation and gives 27.
  • The valid values lie from 8 to 26, so the count is 27 - 8 = 19.
  • Therefore, the output is 19.
C++
#include <iostream>
using namespace std;

int power(int base, int exp)
{
    int res = 1;

    // Compute base raised to the given exponent.
    while (exp > 0)
    {
        if (exp & 1)
            res *= base;

        base *= base;
        exp >>= 1;
    }

    return res;
}

int integralRoot(int n, int k)
{

    // Compute n^k and (n + 1)^k.
    int left = power(n, k);
    int right = power(n + 1, k);

    // Return the number of integers having n as the integral kth root.
    return right - left;
}

int main()
{

    int n = 2, k = 3;

    cout << integralRoot(n, k) << endl;

    return 0;
}
Java
public class GFG {
    public static int power(int base, int exp)
    {
        int res = 1;

        // Compute base raised to the given exponent.
        while (exp > 0) {
            if ((exp & 1) != 0) {
                res *= base;
            }

            base *= base;
            exp >>= 1;
        }

        return res;
    }

    public static int integralRoot(int n, int k)
    {

        // Compute n^k and (n + 1)^k.
        int left = power(n, k);
        int right = power(n + 1, k);

        // Return the number of integers having n as the
        // integral kth root.
        return right - left;
    }

    public static void main(String[] args)
    {
        int n = 2, k = 3;

        System.out.println(integralRoot(n, k));
    }
}
Python
def power(base, exp):
    res = 1

    # Compute base raised to the given exponent.
    while exp > 0:
        if exp & 1:
            res *= base

        base *= base
        exp >>= 1

    return res


def integralRoot(n, k):

    # Compute n^k and (n + 1)^k.
    left = power(n, k)
    right = power(n + 1, k)

    # Return the number of integers having n as the integral kth root.
    return right - left


if __name__ == '__main__':
    n = 2
    k = 3
    print(integralRoot(n, k))
C#
using System;

public class GFG {
    public static int power(int baseNum, int exp)
    {
        int res = 1;

        // Compute base raised to the given exponent.
        while (exp > 0) {
            if ((exp & 1) != 0)
                res *= baseNum;

            baseNum *= baseNum;
            exp >>= 1;
        }

        return res;
    }

    public static int integralRoot(int n, int k)
    {

        // Compute n^k and (n + 1)^k.
        int left = power(n, k);
        int right = power(n + 1, k);

        // Return the number of integers having n as the
        // integral kth root.
        return right - left;
    }

    public static void Main()
    {
        int n = 2, k = 3;

        Console.WriteLine(integralRoot(n, k));
    }
}
JavaScript
function power(base, exp)
{
    let res = 1;

    // Compute base raised to the given exponent.
    while (exp > 0) {
        if (exp & 1) {
            res *= base;
        }

        base *= base;
        exp >>= 1;
    }

    return res;
}

function integralRoot(n, k)
{

    // Compute n^k and (n + 1)^k.
    let left = power(n, k);
    let right = power(n + 1, k);

    // Return the number of integers having n as the
    // integral kth root.
    return right - left;
}

// Driver Code
let n = 2, k = 3;
console.log(integralRoot(n, k));

Output
19
Comment