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

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

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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up