Skip to content
Related Articles
Open in App
Not now

Related Articles

Check if a number is a power of another number

Improve Article
Save Article
Like Article
  • Difficulty Level : Easy
  • Last Updated : 22 Mar, 2023
Improve Article
Save Article
Like Article

Given two positive numbers x and y, check if y is a power of x or not.
Examples : 

Input:  x = 10, y = 1
Output: True
x^0 = 1

Input:  x = 10, y = 1000
Output: True
x^3 = 1

Input:  x = 10, y = 1001
Output: False

A simple solution is to repeatedly compute the powers of x. If a power becomes equal to y, then y is a power, else not. 

C++




// C++ program to check if a number is power of
// another number
#include <bits/stdc++.h>
using namespace std;
 
/* Returns 1 if y is a power of x */
bool isPower(int x, long int y)
{
    // The only power of 1 is 1 itself
    if (x == 1)
        return (y == 1);
 
    // Repeatedly compute power of x
    long int pow = 1;
    while (pow < y)
        pow *= x;
 
    // Check if power of x becomes y
    return (pow == y);
}
 
/* Driver program to test above function */
int main()
{
    cout << isPower(10, 1) << endl;
    cout << isPower(1, 20) << endl;
    cout << isPower(2, 128) << endl;
    cout << isPower(2, 30) << endl;
    return 0;
}


Java




// Java program to check if a number is power of
// another number
public class Test {
    // driver method to test power method
    public static void main(String[] args)
    {
        // check the result for true/false and print.
        System.out.println(isPower(10, 1) ? 1 : 0);
        System.out.println(isPower(1, 20) ? 1 : 0);
        System.out.println(isPower(2, 128) ? 1 : 0);
        System.out.println(isPower(2, 30) ? 1 : 0);
    }
    /* Returns true if y is a power of x */
    public static boolean isPower(int x, int y)
    {
        // The only power of 1 is 1 itself
        if (x == 1)
            return (y == 1);
 
        // Repeatedly compute power of x
        int pow = 1;
        while (pow < y)
            pow = pow * x;
 
        // Check if power of x becomes y
        return (pow == y);
    }
}
 
// This code is contributed by Jyotsna.


Python3




# python program to check
# if a number is power of
# another number
 
# Returns true if y is a
# power of x
def isPower (x, y):
     
    # The only power of 1
    # is 1 itself
    if (x == 1):
        return (y == 1)
         
    # Repeatedly compute
    # power of x
    pow = 1
    while (pow < y):
        pow = pow * x
 
    # Check if power of x
    # becomes y
    return (pow == y)
     
     
# Driver Code
# check the result for
# true/false and print.
if(isPower(10, 1)):
    print(1)
else:
    print(0)
 
if(isPower(1, 20)):
    print(1)
else:
    print(0)
if(isPower(2, 128)):
    print(1)
else:
    print(0)
if(isPower(2, 30)):
    print(1)
else:
    print(0)
     
# This code is contributed
# by Sam007.


C#




// C# program to check if a number
// is power of another number
using System;
 
class GFG
{
     
    // Returns true if y is a power of x
    public static bool isPower (int x, int y)
    {
        // The only power of 1 is 1 itself
        if (x == 1)
        return (y == 1);
 
        // Repeatedly compute power of x
        int pow = 1;
        while (pow < y)
        pow = pow * x;
 
        // Check if power of x becomes y
        return (pow == y);
    }
     
    // Driver Code
    public static void Main ()
    {
        //check the result for true/false and print.
        Console.WriteLine(isPower(10, 1) ? 1 : 0);
        Console.WriteLine(isPower(1, 20) ? 1 : 0);
        Console.WriteLine(isPower(2, 128) ? 1 : 0);
        Console.WriteLine(isPower(2, 30) ? 1 : 0);
    }
     
}
 
// This code is contributed by Sam007


PHP




<?php
// PHP program to check if a
// number is power of another number
 
/* Returns 1 if y is a power of x */
function isPower($x, $y)
{
    // The only power of 1 is 1 itself
    if ($x == 1)
        return ($y == 1 ? 1 : 0);
 
    // Repeatedly comput power of x
    $pow = 1;
    while ($pow < $y)
        $pow *= $x;
 
    // Check if power of x becomes y
    return ($pow == $y ? 1 : 0);
}
 
// Driver Code
echo isPower(10, 1) . "\n";
echo isPower(1, 20) . "\n";
echo isPower(2, 128) . "\n";
echo isPower(2, 30) . "\n";
 
// This code is contributed by mits
?>


Javascript




<script>
 
// JavaScript program to check if a number
// is power of another number
   
/* Returns true if y is a power of x */
    function isPower(x, y)
    {
        // The only power of 1 is 1 itself
        if (x == 1)
            return (y == 1);
   
        // Repeatedly compute power of x
        let pow = 1;
        while (pow < y)
            pow = pow * x;
   
        // Check if power of x becomes y
        return (pow == y);
    }
 
 
// Driver Code
 
        //check the result for true/false and print.
        document.write((isPower(10, 1) ? 1 : 0) + "<br/>");
           document.write((isPower(1, 20) ? 1 : 0) + "<br/>");
        document.write((isPower(2, 128) ? 1 : 0) + "<br/>");
        document.write((isPower(2, 30) ? 1 : 0) + "<br/>");
 
</script>


Output

1
0
1
0

Time complexity: O(Logxy)
Auxiliary space: O(1)

Optimization: 
We can optimize above solution to work in O(Log Log y). The idea is to do squaring of power instead of multiplying it with x, i.e., compare y with x^2, x^4, x^8, …etc. If x becomes equal to y, return true. If x becomes more than y, then we do binary search for power of x between previous power and current power, i.e., between x^i and x^(i/2).
Following are detailed step. 

1) Initialize pow = x, i = 1
2) while (pow < y)
   {
      pow = pow*pow 
      i *= 2
   }    
3) If pow == y
     return true;
4) Else construct an array of powers
   from x^i to x^(i/2)
5) Binary Search for y in array constructed
   in step 4. If not found, return false. 
   Else return true.

Alternate Solution : 
The idea is to take log of y in base x. If it turns out to be an integer, we return true. Else false. 

C++




// CPP program to check given number y
// is power of x
#include <iostream>
#include <math.h>
using namespace std;
 
bool isPower(int x, int y)
{
    // logarithm function to calculate value
    double res1 = log(y) / log(x);
    double res2 = log(y) / log(x); // Note : this is double
 
    // compare to the result1 or result2 both are equal
    return (res1 == res2);
}
 
// Driven program
int main()
{
    cout << isPower(2, 128) << endl;
    return 0;
}


Java




// Java program to check given
// number y is power of x
 
class GFG
{
    static boolean isPower(int x,
                           int y)
    {
        // logarithm function to
        // calculate value
        double res1 = Math.log(y) /
                   Math.log(x);
                    
         // Note : this is double         
        double res2 = Math.log(y) /
                      Math.log(x);
     
        // compare to the result1 or
        // result2 both are equal
        return (res1 == res2);
    }
     
    // Driver Code
    public static void main(String args[])
    {
        if(isPower(2, 128))
            System.out.println("1");
        else
            System.out.println("0");
    }
}
 
// This code is contributed by Sam007


Python3




# Python program to check if given number y
# is power of x
import math
 
def is_power(x, y):
    # logarithm function to calculate value
    res1 = math.log(y) / math.log(x)
    res2 = math.log(y) / math.log(x) # Note: this is float
 
    # compare to the result1 or result2 both are equal
    return res1 == res2
 
# Driven program
if __name__ == "__main__":
    print(is_power(2, 128))


C#




using System;
 
namespace ConsoleApp1
{
  class Program
  {
     
    // Function to check if a number is power of another number
    static bool IsPower(int x, int y)
    {
       
      // Use logarithm function to calculate the value
      double res1 = Math.Log(y) / Math.Log(x);
 
      // Note : this is double
      double res2 = Math.Log(y) / Math.Log(x);
 
      // Compare the result1 or result2, they should be equal
      return (res1 == res2);
    }
 
    static void Main(string[] args)
    {
      // Check if 128 is power of 2
      if (IsPower(2, 128))
        Console.WriteLine("1");
      else
        Console.WriteLine("0");
    }
  }
}
 
// This code is contributed by vinayetbi1.


PHP




<?php
// PHP program to check
// given number y
function isPower($x, $y)
{
    // logarithm function to
    // calculate value
    $res1 = log($y) / log($x);
     
    // Note : this is double
    $res2 = log($y) / log($x);
 
    // compare to the result1 or
    // result2 both are equal
    return ($res1 == $res2);
}
 
// Driver Code
echo isPower(2, 128) ;
 
// This code is contributed by Sam007
?>


Javascript




// JavaScript program to check given number y
// is power of x
 
function isPower(x, y) {
    // logarithm function to calculate value
    const res1 = Math.log(y) / Math.log(x);
    const res2 = Math.log(y) / Math.log(x);
     
    // compare to the result1 or result2 both are equal
    return (res1 === res2);
}
 
// Driven program
console.log(isPower(2, 128));


Output

1

Time complexity: O(1)
Auxiliary space: O(1)

Thanks to Gyayak Jain for suggesting this solution.
This article is contributed by Manish Gupta. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above


My Personal Notes arrow_drop_up
Like Article
Save Article
Related Articles

Start Your Coding Journey Now!