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
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 <bits/stdc++.h> 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
<?php // PHP program to check if a given // number can be expressed as power // Returns true if n can // be written as x^y function isPower( $n ) { if ( $n == 1) return true; // Try all numbers from 2 // to sqrt(n) as base for ( $x = 2; $x <= sqrt( $n ); $x ++) { $y = 2; $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 Code for ( $i = 2; $i < 100; $i ++) if (isPower( $i )) echo $i , " " ; // This code is contributed by aj_36 ?> |
Javascript
<script> // javascript code to check if a number can be expressed // as x^y (x raised to power y) // Returns true if n can be written as x^y function isPower(n) { for (x = 2; x <= Math.sqrt(n); x++) { var y = 2; var 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 for (i = 2; i < 100; i++) if (isPower(i)) document.write(i + " " ); // This code is contributed by gauravrajput1 </script> |
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 <bits/stdc++.h> 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
<?php // PHP program to check if a // given number can be expressed // as power // Returns true if n can // be written as x^y function isPower( $n ) { // Base case if ( $n <= 1) return true; // Try all numbers from 2 // to sqrt(n) as base for ( $x = 2; $x <= sqrt( $n ); $x ++) { $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 Code for ( $i = 2; $i < 100; $i ++) if (isPower( $i )) echo $i , " " ; // This code is contributed by ajit ?> |
Javascript
<script> // Javascript code to check if a number // can be expressed as x^y (x // raised to power y) // Returns true if n can // be written as x^y function isPower(n) { for (let x = 2; x <= parseInt(Math.sqrt(n), 10); x++) { let p = x; while (p <= n) { p = p * x; if (p == n) return true ; } } return false ; } for (let i = 2; i < 100; i++) if (isPower(i)) document.write(i + " " ); // This code is contributed by divyeshrabadiya07. </script> |
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 <bits/stdc++.h> 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
<script> // Javascript program to check if a given // number can be expressed as power // Returns true if n can be written as x^y function isPower(n) { let p; if (n <= 1) { return true ; } for (let i = 2; i <= parseInt(Math.sqrt(n), 10); i++) { p = (Math.log(n) / Math.log(i)).toFixed(14); if ((Math.ceil(p) == Math.floor(p)) && (p > 1)) { return true ; } } return false ; } for (let i = 2; i < 100; i++) { if (isPower(i)) document.write(i + " " ); } </script> |
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