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

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

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

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

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

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

Output:

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

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

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

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

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

 ` `

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 `

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

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