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

22 Apr, 2021
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++
Java
Python3
C#
PHP
Javascript
// 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^ybool 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 Programint main(){    for (int i =2; i<100; i++)        if (isPower(i))           cout << i << "  ";    return 0;}
// 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 program to check if# a given number can be expressed# as powerimport math # Returns true if n can be written as x^ydef 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 Programfor i in range(2,100 ) :    if (isPower(i)) :        print(i,end=" ")                  # This code is contributed by Nikita Tiwari.
// 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 program to check if a given// number can be expressed as power // Returns true if n can// be written as x^yfunction 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 Codefor ($i = 2; $i < 100; $i++)    if (isPower($i))    echo $i , " "; // This code is contributed by aj_36?>
<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 
One optimization in the above solution is to avoid the call to pow() by multiplying p with x one by one. 
C++
Java
Python3
C#
PHP
Javascript
// 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^ybool 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 Programint main(){    for (int i =2; i<100; i++)        if (isPower(i))           cout << i << "  ";    return 0;}
// 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 program to check if# a given number can be expressed# as powerimport math # Returns true if n can be written# as x ^ ydef 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 Programfor i in range(2, 100) :         if (isPower(i)) :        print( i, end =" ")         # This code is contributed by Nikita Tiwari.
// 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 program to check if a// given number can be expressed// as power // Returns true if n can// be written as x^yfunction 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?>
<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>
4  8  9  16  25  27  32  36  49  64  81
 
Alternate Implementation : 
C++
Java
Python3
C#
Javascript
// 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^ybool 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 Programint main(){    for (int i = 2; i < 100; i++)        if (isPower(i))            cout << i << " ";    return 0;}
// Java program to check if a given// number can be expressed as powerimport java.io.*;import java.lang.Math; class GFG {     // Returns true if n can be written as x^ystatic 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 Codepublic 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 program to check if a given# number can be expressed as powerimport math # Returns true if n can be# written as x^ydef 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 codefor i in range(2, 100):    if isPower(i):        print(i, end = " ") # This code is contributed by sallagondaavinashreddy7
// C# program to check if a given// number can be expressed as powerusing System; class GFG{     // Returns true if n can be written as x^ystatic 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 codestatic public void Main (){    for(int i = 2; i < 100; i++)    {       if (isPower(i))           Console.Write(i + " ");    }}} // This code is contributed by shubhamsingh10
<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>
4 8 9 16 25 27 32 36 49 64 81
 
Efficient Solution: Check if a number can be expressed as a^b | Set 2This 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 
jit_t
nitin mittal
Kuldeep Jangid
SHUBHAMSINGH10
sallagondaavinashreddy7
GauravRajput1
divyeshrabadiya07
mukesh07
Amazon
Housing.com
maths-power
number-theory
Mathematical
Amazon
Housing.com
number-theory
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program to find GCD or HCF of two numbers
Modulo Operator (%) in C/C++ with Examples
Merge two sorted arrays
Prime Numbers
Program to find sum of elements in a given array
Program for factorial of a number
Operators in C / C++
Sieve of Eratosthenes
Program for Decimal to Binary Conversion
Euclidean algorithms (Basic and Extended)