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 :

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

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