Skip to content
Related Articles
Open in App
Not now

Related Articles

Check if a number can be expressed as x^y (x raised to power y)

Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 20 Mar, 2023
Improve Article
Save Article

Given a positive integer n, find if it can be expressed as xy where y > 1 and x > 0. x and y both are integers.

Examples : 

Input:  n = 8
Output: true
8 can be expressed as 23

Input:  n = 49
Output: true
49 can be expressed as 72

Input:  n = 48
Output: false
48 can't be expressed as xy

The idea is simple to try all numbers x starting from 2 to square root of n (given number). For every x, try x^y where y starts from 2 and increases one by one until either x^y becomes n or greater than n.

Below is the implementation of the above idea. 

C++




// C++ program to check if a given number can be expressed
// as power
#include <bits/stdc++.h>
using namespace std;
 
// Returns true if n can be written as x^y
bool isPower(unsigned n)
{
    if (n==1)  return true;
 
    // Try all numbers from 2 to sqrt(n) as base
    for (int x=2; x<=sqrt(n); x++)
    {
        unsigned y = 2;
        unsigned p = pow(x, y);
 
        // Keep increasing y while power 'p' is smaller
        // than n.
        while (p<=n && p>0)
        {
            if (p==n)
                return true;
            y++;
            p = pow(x, y);
         }
    }
    return false;
}
 
// Driver Program
int main()
{
    for (int i =2; i<100; i++)
        if (isPower(i))
           cout << i << "  ";
    return 0;
}


Java




// Java code to check if a number can be expressed
// as x^y (x raised to power y)
class GFG {
 
    // Returns true if n can be written as x^y
    static boolean isPower(int n)
    {
        for (int x = 2; x <= Math.sqrt(n); x++) {
            int y = 2;
 
            double p = Math.pow(x, y);
 
            while (p <= n && p > 0) {
                if (p == n)
                    return true;
                y++;
                p = Math.pow(x, y);
            }
        }
        return false;
    }
 
    // Driver function
    public static void main(String[] args)
    {
        for (int i = 2; i < 100; i++)
            if (isPower(i))
                System.out.print(i + " ");
    }
}
 
// This code is submitted by Kamal Rawal


Python3




# Python3 program to check if
# a given number can be expressed
# as power
import math
 
# Returns true if n can be written as x^y
def isPower(n) :
    if (n==1)  :
        return True
  
    # Try all numbers from 2 to sqrt(n) as base
    for x in range(2,(int)(math.sqrt(n))+1) :
        y = 2
        p = (int)(math.pow(x, y))
  
        # Keep increasing y while power 'p' is smaller
        # than n.
        while (p<=n and p>0) :
            if (p==n) :
                return True
             
            y = y + 1
            p = math.pow(x, y)
          
          
    return False
     
  
# Driver Program
for i in range(2,100 ) :
    if (isPower(i)) :
        print(i,end=" ")
         
         
# This code is contributed by Nikita Tiwari.


C#




// C# code to check if a number
// can be expressed as x^y
// (x raised to power y)
using System;
 
class GFG
{
    // Returns true if n can
    // be written as x^y
    static bool isPower(int n)
    {
        for (int x = 2; x <= Math.Sqrt(n); x++)
        {
            int y = 2;
 
            double p = Math.Pow(x, y);
 
            while (p <= n && p > 0)
            {
                if (p == n)
                    return true;
                y++;
                p = Math.Pow(x, y);
            }
        }
        return false;
    }
 
    // Driver Code
    static public void Main ()
    {
        for (int i = 2; i < 100; i++)
            if (isPower(i))
                Console.Write(i + " ");
    }
}
 
// This code is submitted by ajit.


PHP




<?php
// PHP program to check if a given
// number can be expressed as power
 
// Returns true if n can
// be written as x^y
function isPower($n)
{
    if ($n == 1) return true;
 
    // Try all numbers from 2
    // to sqrt(n) as base
    for ($x = 2; $x <= sqrt($n); $x++)
    {
        $y = 2;
        $p = pow($x, $y);
 
        // Keep increasing y while
        // power 'p' is smaller than n.
        while ($p <= $n && $p > 0)
        {
            if ($p == $n)
                return true;
            $y++;
            $p = pow($x, $y);
        }
    }
    return false;
}
 
// Driver Code
for ($i = 2; $i < 100; $i++)
    if (isPower($i))
    echo $i , " ";
 
// This code is contributed by aj_36
?>


Javascript




<script>
// javascript code to check if a number can be expressed
// as x^y (x raised to power y)   
// Returns true if n can be written as x^y
    function isPower(n)
    {
        for (x = 2; x <= Math.sqrt(n); x++) {
            var y = 2;
 
            var p = Math.pow(x, y);
 
            while (p <= n && p > 0) {
                if (p == n)
                    return true;
                y++;
                p = Math.pow(x, y);
            }
        }
        return false;
    }
 
    // Driver function
        for (i = 2; i < 100; i++)
            if (isPower(i))
                document.write(i + " ");
 
// This code is contributed by gauravrajput1
</script>


Output :

4 8 9 16 25 27 32 36 49 64 81 

Time Complexity: O(100 * n*log n) //as inbuilt sqrt function takes log n time to execute

Auxiliary Space: O(1)

One optimization in the above solution is to avoid the call to pow() by multiplying p with x one by one. 

C++




// C++ program to check if a given number can be expressed
// as power
#include <bits/stdc++.h>
using namespace std;
 
// Returns true if n can be written as x^y
bool isPower(unsigned int n)
{
    // Base case
    if (n <= 1) return true;
 
    // Try all numbers from 2 to sqrt(n) as base
    for (int x=2; x<=sqrt(n); x++)
    {
        unsigned  p = x;
 
        // Keep multiplying p with x while is smaller
        // than or equal to x
        while (p <= n)
        {
            p *= x;
            if (p == n)
                return true;
        }
    }
    return false;
}
 
// Driver Program
int main()
{
    for (int i =2; i<100; i++)
        if (isPower(i))
           cout << i << "  ";
    return 0;
}


Java




// Java code to check if a number can be expressed
// as x^y (x raised to power y)
class GFG {
     
    // Returns true if n can be written as x^y
    static boolean isPower(int n)
    {
        for (int x = 2; x <= Math.sqrt(n); x++) {
            int p = x;
 
            while (p <= n) {
                p = p * x;
                if (p == n)
                    return true;
            }
        }
        return false;
    }
 
    // Driver function
    public static void main(String[] args)
    {
        for (int i = 2; i < 100; i++)
            if (isPower(i))
                System.out.print(i + " ");
    }
}
 
// This code is submitted by Kamal Rawal


Python3




# Python3 program to check if
# a given number can be expressed
# as power
import math
 
# Returns true if n can be written
# as x ^ y
def isPower(n) :
 
    # Base case
    if (n <= 1) :
        return True
 
    # Try all numbers from 2 to sqrt(n)
    # as base
    for x in range(2, (int)(math.sqrt(n)) + 1) :
        p = x
 
        # Keep multiplying p with x while
        # is smaller than or equal to x
        while (p <= n) :
            p = p * x
             
            if (p == n) :
                return True
         
    return False
     
# Driver Program
for i in range(2, 100) :
     
    if (isPower(i)) :
        print( i, end =" ")
         
# This code is contributed by Nikita Tiwari.


C#




// C# code to check if a number
// can be expressed as x^y (x
// raised to power y)
using System;
 
class GFG
{
     
    // Returns true if n can
    // be written as x^y
    static bool isPower(int n)
    {
        for (int x = 2;
                 x <= Math.Sqrt(n); x++)
        {
            int p = x;
 
            while (p <= n)
            {
                p = p * x;
                if (p == n)
                    return true;
            }
        }
        return false;
    }
 
    // Driver Code
    public static void Main()
    {
        for (int i = 2; i < 100; i++)
            if (isPower(i))
                Console.Write(i + " ");
    }
}
 
// This code is submitted by nitin mittal.


PHP




<?php
// PHP program to check if a
// given number can be expressed
// as power
 
// Returns true if n can
// be written as x^y
function isPower($n)
{
    // Base case
    if ($n <= 1) return true;
 
    // Try all numbers from 2
    // to sqrt(n) as base
    for ($x = 2; $x <= sqrt($n); $x++)
    {
        $p = $x;
 
        // Keep multiplying p with
        // x while is smaller
        // than or equal to x
        while ($p <= $n)
        {
            $p *= $x;
            if ($p == $n)
                return true;
        }
    }
    return false;
}
 
    // Driver Code
    for ($i = 2; $i < 100; $i++)
        if (isPower($i))
        echo $i , " ";
 
// This code is contributed by ajit
?>


Javascript




<script>
    // Javascript code to check if a number
    // can be expressed as x^y (x
    // raised to power y)
     
    // Returns true if n can
    // be written as x^y
    function isPower(n)
    {
        for (let x = 2; x <= parseInt(Math.sqrt(n), 10); x++)
        {
            let p = x;
  
            while (p <= n)
            {
                p = p * x;
                if (p == n)
                    return true;
            }
        }
        return false;
    }
     
    for (let i = 2; i < 100; i++)
            if (isPower(i))
                document.write(i + " ");
     
    // This code is contributed by divyeshrabadiya07.
</script>


Output: 

4  8  9  16  25  27  32  36  49  64  81

 

Time Complexity: O(100 * n*log(n)), where n is the number ranging from 1 to 100
Auxiliary Space: O(1), as no extra space is required

Alternate Implementation : 

C++




// C++ program to check if a given number can be expressed
// as power
#include <bits/stdc++.h>
using namespace std;
 
// Returns true if n can be written as x^y
bool isPower(unsigned n)
{
    float p;
    if (n <= 1)
        return 1;
    for (int i = 2; i <= sqrt(n); i++) {
        p = log2(n) / log2(i);
        if ((ceil(p) == floor(p)) && p > 1)
            return true;
    }
    return false;
}
 
// Driver Program
int main()
{
    for (int i = 2; i < 100; i++)
        if (isPower(i))
            cout << i << " ";
    return 0;
}


Java




// Java program to check if a given
// number can be expressed as power
import java.io.*;
import java.lang.Math;
 
class GFG {
     
// Returns true if n can be written as x^y
static boolean isPower(int n)
{
    double p;
    if (n <= 1)
    {
        return true;
    }
    for(int i = 2; i <= Math.sqrt(n); i++)
    {
       p = Math.log(n) / Math.log(i);
 
       if ((Math.ceil(p) == Math.floor(p)) && p > 1)
       {
           return true;
       }
    }
    return false;
}
     
// Driver Code
public static void main (String[] args)
{
    for(int i = 2; i < 100; i++)
    {
       if (isPower(i))
           System.out.print(i + " ");
    }
}
}
 
// This code is contributed by shubhamsingh10


Python3




# Python3 program to check if a given
# number can be expressed as power
import math
 
# Returns true if n can be
# written as x^y
def isPower(n):
     
    p = 0
     
    if (n <= 1):
        return 1
         
    for i in range(2, (int)(math.sqrt(n)) + 1):
        p = math.log2(n) / math.log2(i)
         
        if ((math.ceil(p) ==
            math.floor(p)) and p > 1):
            return 1
             
    return 0
     
# Driver code
for i in range(2, 100):
    if isPower(i):
        print(i, end = " ")
 
# This code is contributed by sallagondaavinashreddy7


C#




// C# program to check if a given
// number can be expressed as power
using System;
 
class GFG{
     
// Returns true if n can be written as x^y
static bool isPower(int n)
{
    double p;
    if (n <= 1)
    {
        return true;
    }
     
    for(int i = 2; i <= Math.Sqrt(n); i++)
    {
       p = Math.Log(n) / Math.Log(i);
        
       if ((Math.Ceiling(p) == Math.Floor(p)) && p > 1)
       {
           return true;
       }
    }
    return false;
}
     
// Driver code
static public void Main ()
{
    for(int i = 2; i < 100; i++)
    {
       if (isPower(i))
           Console.Write(i + " ");
    }
}
}
 
// This code is contributed by shubhamsingh10


Javascript




<script>
 
    // Javascript program to check if a given
    // number can be expressed as power
     
    // Returns true if n can be written as x^y
    function isPower(n)
    {
        let p;
        if (n <= 1)
        {
            return true;
        }
 
        for(let i = 2; i <= parseInt(Math.sqrt(n), 10); i++)
        {
           p = (Math.log(n) / Math.log(i)).toFixed(14);
           if ((Math.ceil(p) == Math.floor(p)) && (p > 1))
           {
               return true;
           }
        }
        return false;
    }
     
    for(let i = 2; i < 100; i++)
    {
       if (isPower(i))
           document.write(i + " ");
    }
 
</script>


Output: 

4 8 9 16 25 27 32 36 49 64 81

 

Time Complexity: O(100 * sqrt(n)), where n is the number ranging from 1 to 100
Auxiliary Space: O(1), as no extra space is required

Efficient Solution: Check if a number can be expressed as a^b | Set 2
This article is contributed by Vaibhav Gupta. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
 


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!