# 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