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

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 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 above idea.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 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.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right



Output :

4 8 9 16 25 27 32 36 49 64 81 

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

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 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.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right



Output :

4 8 9 16 25 27 32 36 49 64 81 

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

Improved By : jit_t, nitin mittal