Related Articles
Check if a number can be expressed as x^y (x raised to power y)
• Difficulty Level : Easy
• Last Updated : 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++

 `// C++ program to check if a given number can be expressed``// as power``#include ``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

 ` 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

 ``

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

 `// C++ program to check if a given number can be expressed``// as power``#include ``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

 ``

## Javascript

 ``
Output:
`4  8  9  16  25  27  32  36  49  64  81`

Alternate Implementation :

## C++

 `// C++ program to check if a given number can be expressed``// as power``#include ``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

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