Check if a number can be expressed as a^b | Set 2

Last Updated : 11 Jul, 2025

You have given a number n. Check if a number can be represented in the form of pow(a, b) (a^b).

Examples: 

Input : 4
Output : Yes
22 = 4

Input : 12
Output : No

We have discussed two approaches in Check if a number can be expressed as x^y (x raised to power y). In this post, a more efficient solution is discussed. The idea is based on logarithmic.

Consider a no. N which needs 
to be expressed in the form (a^b).
N = ab
Taking log both sides:
log (N) = b.log (a)
b = log(N)/log(a)

Keep this logic in mind to develop the most efficient solution mentioned below:

C++
// CPP program to check if a number
// can be expressed as a^b.
#include <bits/stdc++.h>
using namespace std;

bool isPower(int a)
{
    if (a == 1)
        return true;

    for (int i = 2; i * i <= a; i++) {
        double val = log(a) / log(i);
        if ((val - (int)val) < 0.00000001)
            return true;
    }

    return false;
}

// Driver code
int main()
{
    int n = 16;
    cout << (isPower(n) ? "Yes" : "No");
    return 0;
}
Java
//Java program to check if a number
//can be expressed as a^b.

public class GFG {

    static boolean isPower(int a)
    {
    if (a == 1)
        return true;

    for (int i = 2; i * i <= a; i++) {
        double val = Math.log(a) / Math.log(i);
        if ((val - (int)val) < 0.00000001)
            return true;
    }

    return false;
    }
    
    // Driver code
    public static void main(String[] args) {
        
        int n = 16;
        System.out.println(isPower(n) ? "Yes" : "No");

    }
}
Python 3
# Python 3 Program to check if a number 
# can be expressed as a^b

from math import *

def isPower(a) :
    if a== 1 :
        return True

    for i in range(2, int(sqrt(a)) + 1) :
        val = log(a) / log(i)

        if (round((val - int(val)),8) < 0.00000001):
            return True
    
    return False


# Driver Code
if __name__ == "__main__" :

    n = 16

    if isPower(n) :
        print("Yes")
    else :
        print("No")

# This code is contributed by ANKITRAI1
C#
// C# program to check if a number 
// can be expressed as a^b. 
using System;

class GFG
{

public static bool isPower(int a)
{
    if (a == 1)
    {
        return true;
    }

    for (int i = 2; i * i <= a; i++)
    {
        double val = Math.Log(a) / 
                     Math.Log(i);
        if ((val - (int)val) < 0.00000001)
        {
            return true;
        }
    }
return false;
}

// Driver code 
public static void Main(string[] args)
{
    int n = 16;
    Console.WriteLine(isPower(n) ? 
                           "Yes" : "No");
}
}

// This code is contributed 
// by Shrikant13
PHP
<?php
// PHP program to check if a number
// can be expressed as a^b.

function isPower($a)
{
    if ($a == 1)
        return true;

    for ($i = 2; $i * $i <= $a; $i++)
    {
        $val = log($a) / log($i);
        if (($val - $val) < 0.00000001)
            return true;
    }

    return false;
}

// Driver code
$n = 16;
echo (isPower($n) ? "Yes" : "No");

// This code is contributed 
// by Akanksha Rai(Abby_akku)
JavaScript
<script>
//Javascript program to check if a number
//can be expressed as a^b.
    
    function isPower(a)
    {
        if (a == 1)
        return true;
 
    for (let i = 2; i * i <= a; i++) {
        let val = Math.log(a) / Math.log(i);
        if ((val - Math.floor(val)) < 0.00000001)
            return true;
    
    }
 
    return false;
    
    }
    
    // Driver code
    let n = 16;
    document.write(isPower(n) ? "Yes" : "No");
    
    
    // This code is contributed by avanitrachhadiya2155
</script>

Output
Yes

Time Complexity : O(sqrt(n))

Auxiliary Space: O(1)

Comment