Find whether a given number is a power of 4 or not - GeeksforGeeks

12 Jan, 2022
Given an integer n, find whether it is a power of 4 or not.
Example : 
Input : 16
Output : 16 is a power of 4

Input : 20
Output : 20 is not a power of 4
1. A simple method is to take a log of the given number on base 4, and if we get an integer then the number is the power of 4. 2. Another solution is to keep dividing the number by 4, i.e, do n = n/4 iteratively. In any iteration, if n%4 becomes non-zero and n is not 1 then n is not a power of 4, otherwise, n is a power of 4. 
C++
C
Java
Python3
C#
PHP
Javascript
// C++ program to find whether a given// number is a power of 4 or not#include<iostream> using namespace std;#define bool int class GFG{     /* Function to check if x is power of 4*/public : bool isPowerOfFour(int n){    if(n == 0)        return 0;    while(n != 1)    {        if(n % 4 != 0)            return 0;        n = n / 4;    }    return 1;}}; /*Driver code*/int main(){    GFG g;    int test_no = 64;    if(g.isPowerOfFour(test_no))        cout << test_no << " is a power of 4";    else        cout << test_no << "is not a power of 4";    getchar();} // This code is contributed by SoM15242
#include<stdio.h>#define bool int /* Function to check if x is power of 4*/bool isPowerOfFour(int n){  if(n == 0)    return 0;  while(n != 1)  {      if(n % 4 != 0)      return 0;    n = n / 4;       }  return 1;} /*Driver program to test above function*/int main(){  int test_no = 64;  if(isPowerOfFour(test_no))    printf("%d is a power of 4", test_no);  else    printf("%d is not a power of 4", test_no);  getchar();}
// Java code to check if given// number is power of 4 or not class GFG {     // Function to check if    // x is power of 4    static int isPowerOfFour(int n)    {        if(n == 0)        return 0;        while(n != 1)        {            if(n % 4 != 0)            return 0;            n = n / 4;            }        return 1;    }     // Driver program    public static void main(String[] args)    {        int test_no = 64;        if(isPowerOfFour(test_no) == 1)         System.out.println(test_no +                           " is a power of 4");        else         System.out.println(test_no +                           "is not a power of 4");    }} // This code is contributed// by  prerna saini
# Python3 program to check if given# number is power of 4 or not # Function to check if x is power of 4def isPowerOfFour(n):    if (n == 0):        return False    while (n != 1):            if (n % 4 != 0):                return False            n = n // 4                 return True # Driver codetest_no = 64if(isPowerOfFour(64)):    print(test_no, 'is a power of 4')else:    print(test_no, 'is not a power of 4') # This code is contributed by Danish Raza
// C# code to check if given// number is power of 4 or notusing System; class GFG {         // Function to check if    // x is power of 4    static int isPowerOfFour(int n)    {        if (n == 0)            return 0;        while (n != 1) {            if (n % 4 != 0)                return 0;            n = n / 4;        }        return 1;    }     // Driver code    public static void Main()    {        int test_no = 64;        if (isPowerOfFour(test_no) == 1)            Console.Write(test_no +                    " is a power of 4");        else            Console.Write(test_no +                " is not a power of 4");    }} // This code is contributed by Sam007
<?php// PHP code to check if given// number is power of 4 or not // Function to check if// x is power of 4function isPowerOfFour($n){         if($n == 0)        return 0;    while($n != 1)    {        if($n % 4 != 0)            return 0;            $n = $n / 4;        }    return 1;} // Driver Code$test_no = 64; if(isPowerOfFour($test_no))    echo $test_no," is a power of 4";else    echo $test_no," is not a power of 4"; // This code is contributed by Rajesh?>
<script> /* Function to check if x is power of 4*/function isPowerOfFour( n){  if(n == 0)    return false;  while(n != 1)  {      if(n % 4 != 0)      return false;    n = n / 4;       }  return true;} /*Driver program to test above function*/let test_no = 64;  if(isPowerOfFour(test_no))    document.write(test_no+" is a power of 4");  else    document.write(test_no+" is not a power of 4"); // This code is contributed by gauravrajput1 </script>
64 is a power of 4
Time Complexity: O(log4n)
Auxiliary Space: O(1)3. A number n is a power of 4 if the following conditions are met. a) There is only one bit set in the binary representation of n (or n is a power of 2) b) The count of zero bits before the (only) set bit is even.For example 16 (10000) is the power of 4 because there is only one bit set and count of 0s before the set bit is 4 which is even.Thanks to Geek4u for suggesting the approach and providing the code. 
C++
C
Java
Python3
C#
PHP
Javascript
// C++ program to check// if given number is// power of 4 or not#include<bits/stdc++.h> using namespace std; bool isPowerOfFour(unsigned int n){    int count = 0;     /*Check if there is only one bit set in n*/    if ( n && !(n&(n-1)) )    {        /* count 0 bits before set bit */        while(n > 1)        {            n >>= 1;            count += 1;        }         /*If count is even then        return true else false*/        return (count%2 == 0)? 1 :0;    }     /* If there are more than 1 bit set    then n is not a power of 4*/    return 0;} /*Driver code*/int main(){    int test_no = 64;    if(isPowerOfFour(test_no))        cout << test_no << " is a power of 4" ;    else        cout << test_no << " is not a power of 4";} // This code is contributed by Shivi_Aggarwal
#include<stdio.h>#define bool int bool isPowerOfFour(unsigned int n){  int count = 0;   /*Check if there is only one bit set in n*/  if ( n && !(n&(n-1)) )  {     /* count 0 bits before set bit */     while(n > 1)     {       n  >>= 1;       count += 1;     }          /*If count is even then return true else false*/    return (count%2 == 0)? 1 :0;  }   /* If there are more than 1 bit set    then n is not a power of 4*/  return 0;}    /*Driver program to test above function*/int main(){   int test_no = 64;   if(isPowerOfFour(test_no))     printf("%d is a power of 4", test_no);   else     printf("%d is not a power of 4", test_no);   getchar();}
// Java program to check// if given number is// power of 4 or notimport java.io.*;class GFG{    static int isPowerOfFour(int n)    {        int count = 0;                 /*Check if there is        only one bit set in n*/        int x = n & (n - 1);                 if ( n > 0 && x == 0)        {            /* count 0 bits            before set bit */            while(n > 1)            {                n >>= 1;                count += 1;            }                     /*If count is even            then return true            else false*/            return (count % 2 == 0) ? 1 : 0;        }                     /* If there are more than            1 bit set then n is not a            power of 4*/        return 0;    }     // Driver Code    public static void main(String[] args)    {        int test_no = 64;                 if(isPowerOfFour(test_no)>0)            System.out.println(test_no +                               " is a power of 4");        else            System.out.println(test_no +                               " is not a power of 4");    }} // This code is contributed by mits
# Python3 program to check if given# number is power of 4 or not # Function to check if x is power of 4def isPowerOfFour(n):         count = 0         # Check if there is only one    # bit set in n    if (n and (not(n & (n - 1)))):                 # count 0 bits before set bit        while(n > 1):            n >>= 1            count += 1                 # If count is even then return        # true else false        if(count % 2 == 0):            return True        else:            return False # Driver codetest_no = 64if(isPowerOfFour(64)):    print(test_no, 'is a power of 4')else:    print(test_no, 'is not a power of 4') # This code is contributed by Danish Raza
// C# program to check if given// number is power of 4 or notusing System; class GFG {         static int isPowerOfFour(int n)    {        int count = 0;                 /*Check if there is only one bit        set in n*/        int x = n & (n-1);                 if ( n > 0 && x == 0)        {            /* count 0 bits before set bit */            while(n > 1)            {                n >>= 1;                count += 1;            }                     /*If count is even then return            true else false*/            return (count % 2 == 0) ? 1 : 0;        }                     /* If there are more than 1 bit set            then n is not a power of 4*/        return 0;    }     /*Driver program to test above function*/    static void Main()    {        int test_no = 64;                 if(isPowerOfFour(test_no)>0)            Console.WriteLine("{0} is a power of 4",                                          test_no);        else            Console.WriteLine("{0} is not a power of 4",                                             test_no);    }} // This Code is Contributed by mits
<?php function isPowerOfFour($n){    $count = 0; /*Check if there is only one bit set in n*/if ( $n && !($n&($n-1)) ){    /* count 0 bits before set bit */    while($n > 1)    {    $n >>= 1;    $count += 1;    }         /*If count is even then return true else false*/    return ($count%2 == 0)? 1 :0;} /* If there are more than 1 bit set    then n is not a power of 4*/return 0;} /*Driver program to test above function*/     $test_no = 64;     if(isPowerOfFour($test_no))     echo $test_no, " is a power of 4"; else     echo $test_no, " not is a power of 4";      #This Code is Contributed by Ajit?>
<script> // javascript program to check// if given number is// power of 4 or not function isPowerOfFour( n){    let count = 0;     /*Check if there is only one bit set in n*/    if ( n && !(n&(n-1)) )    {        /* count 0 bits before set bit */        while(n > 1)        {            n >>= 1;            count += 1;        }         /*If count is even then        return true else false*/        return (count%2 == 0)? 1 :0;    }     /* If there are more than 1 bit set    then n is not a power of 4*/    return 0;} /*Driver code*/    let test_no = 64;    if(isPowerOfFour(test_no))       document.write( test_no +" is a power of 4" );    else        document.write(test_no + " is not a power of 4");  // This code contributed by aashish1995 </script>
64 is a power of 4
Time Complexity: O(log4n)
Auxiliary Space: O(1)
4. A number n is a power of 4 if the following conditions are met. a) There is only one bit set in the binary representation of n (or n is a power of 2) b) The bits don’t AND(&) any part of the pattern 0xAAAAAAAAFor example: 16 (10000) is power of 4 because there is only one bit set and 0x10 & 0xAAAAAAAA is zero.Thanks to Sarthak Sahu for suggesting the approach. 
C++
C
Java
Python3
C#
Javascript
// C++ program to check// if given number is// power of 4 or not#include<bits/stdc++.h> using namespace std; bool isPowerOfFour(unsigned int n){    return n !=0 && ((n&(n-1)) == 0) && !(n & 0xAAAAAAAA);} /*Driver code*/int main(){    int test_no = 64;    if(isPowerOfFour(test_no))        cout << test_no << " is a power of 4" ;    else        cout << test_no << " is not a power of 4";}
// C program to check// if given number is// power of 4 or not#include<stdio.h>#define bool int bool isPowerOfFour(unsigned int n){  return n != 0 && ((n&(n-1)) == 0) && !(n & 0xAAAAAAAA);}    /*Driver program to test above function*/int main() {   int test_no = 64;   if(isPowerOfFour(test_no))     printf("%d is a power of 4", test_no);   else     printf("%d is not a power of 4", test_no);   getchar();}
// Java program to check// if given number is// power of 4 or notimport java.io.*;class GFG {    static boolean isPowerOfFour(int n) {        return n != 0 && ((n&(n-1)) == 0) && (n & 0xAAAAAAAA) == 0;    }     // Driver Code    public static void main(String[] args) {        int test_no = 64;                 if(isPowerOfFour(test_no))            System.out.println(test_no +                               " is a power of 4");        else            System.out.println(test_no +                               " is not a power of 4");    }}
# Python3 program to check# if given number is# power of 4 or notdef isPowerOfFour(n):    return (n != 0 and          ((n & (n - 1)) == 0) and            not(n & 0xAAAAAAAA)); # Driver codetest_no = 64;if(isPowerOfFour(test_no)):    print(test_no ,"is a power of 4");else:    print(test_no , "is not a power of 4"); # This code contributed by Rajput-Ji
// C# program to check// if given number is// power of 4 or notusing System; class GFG{    static bool isPowerOfFour(int n)    {        return n != 0 && ((n&(n-1)) == 0) &&                        (n & 0xAAAAAAAA) == 0;    }     // Driver Code    static void Main()    {        int test_no = 64;                 if(isPowerOfFour(test_no))            Console.WriteLine("{0} is a power of 4",                                        test_no);        else            Console.WriteLine("{0} is not a power of 4",                                            test_no);    }} // This code is contributed by mohit kumar 29
<script>// C++ program to check// if given number is// power of 4 or not   function isPowerOfFour( n){    return n !=0 && ((n&(n-1)) == 0) && !(n & 0xAAAAAAAA);}  /*Driver code*/ test_no = 64;    if(isPowerOfFour(test_no))        document.write(test_no + " is a power of 4");    else        document.write(test_no + " is not a power of 4");//This code is contributed by simranarora5sos</script>
64 is a power of 4
Time Complexity: O(log4n)
Auxiliary Space: O(1)Why 0xAAAAAAAA ? This is because the bit representation is of powers of 2 that are not of 4. Like 2, 8, 32 so on.5. A number will be a power of 4 if floor(log4(num))=ceil(log4(num) because log4 of a number that is a power of 4 will always be an integer. 
Below is the implementation of the above approach. 
C++
Java
Python3
C#
Javascript
// C++ program to check // if given number is // power of 4 or not #include<bits/stdc++.h>   using namespace std; float logn(int n, int r){    return log(n) / log(r);} bool isPowerOfFour(int n){    //0 is not considered as a power    //of 4    if(n == 0)        return false;    return floor(logn(n,4))==ceil(logn(n,4));}    /*Driver code*/int main(){    int test_no = 64;    if(isPowerOfFour(test_no))        cout << test_no << " is a power of 4" ;    else        cout << test_no << " is not a power of 4";    return 0;}
// Java program to check// if given number is// power of 4 or notimport java.util.*;class GFG{ static double logn(int n,                   int r){  return Math.log(n) /         Math.log(r);} static boolean isPowerOfFour(int n){  // 0 is not considered  // as a power of 4  if (n == 0)    return false;  return Math.floor(logn(n, 4)) ==         Math.ceil(logn(n, 4));} // Driver codepublic static void main(String[] args){  int test_no = 64;  if (isPowerOfFour(test_no))    System.out.print(test_no +                     " is a power of 4");  else    System.out.print(test_no +                     " is not a power of 4");}} // This code is contributed by Amit Katiyar
# Python3 program to check# if given number is# power of 4 or notimport math def logn(n, r):    return math.log(n) / math.log(r) def isPowerOfFour(n):         # 0 is not considered    # as a power of 4    if (n == 0):        return False             return (math.floor(logn(n, 4)) ==             math.ceil(logn(n, 4))) # Driver codeif __name__ == '__main__':         test_no = 64         if (isPowerOfFour(test_no)):        print(test_no, " is a power of 4")    else:        print(test_no, " is not a power of 4") # This code is contributed by Amit Katiyar
// C# program to check// if given number is// power of 4 or notusing System;class GFG{ static double logn(int n,                   int r){  return Math.Log(n) /         Math.Log(r);} static bool isPowerOfFour(int n){  // 0 is not considered  // as a power of 4  if (n == 0)    return false;  return Math.Floor(logn(n, 4)) ==         Math.Ceiling(logn(n, 4));} // Driver codepublic static void Main(String[] args){  int test_no = 64;  if (isPowerOfFour(test_no))    Console.Write(test_no +                  " is a power of 4");  else    Console.Write(test_no +                  " is not a power of 4");}} // This code is contributed by 29AjayKumar
<script>// javascript program to check // if given number is // power of 4 or not     function logn( n,  r){    return Math.log(n) / Math.log(r);} function isPowerOfFour( n){    //0 is not considered as a power    //of 4    if(n == 0)        return false;    return Math.floor(logn(n,4))==Math.ceil(logn(n,4));}    /*Driver code*/     let test_no = 64;    if(isPowerOfFour(test_no))        document.write(test_no + " is a power of 4") ;    else        document.write( test_no + " is not a power of 4");        // This code contributed by gauravrajput1 </script>
64 is a power of 4
Time Complexity: O(log4n)
Auxiliary Space: O(1)
6. Using Log and without using ceil (Oneliner)
We can easily calculate without using ceil by checking the log of number base 4 to the power of 4 is equal to that number
C++
Java
Python3
C#
Javascript
// C++ program to check// if given number is// power of 4 or not#include <bits/stdc++.h>using namespace std; int isPowerOfFour(int n){    return (n > 0 and pow(4, int(log2(n) /                                 log2(4))) == n);} // Driver codeint main(){    int test_no = 64;     if (isPowerOfFour(test_no))        cout << test_no << " is a power of 4";    else        cout << test_no << " is not a power of 4";             return 0;} // This code is contributed by ukasp
// Java program to check// if given number isimport java.io.*; class GFG{     static boolean isPowerOfFour(int n){    return (n > 0 && Math.pow(        4, (int)((Math.log(n) /                  Math.log(2)) /                 (Math.log(4) /                  Math.log(2)))) == n);} // Driver codepublic static void main(String[] args){    int test_no = 64;         if (isPowerOfFour(test_no))        System.out.println(test_no +         " is a power of 4");    else        System.out.println(test_no +         " is not a power of 4");}} // This code is contributed by rag2127
# Python3 program to check# if given number is# power of 4 or notimport math  def isPowerOfFour(n):    return (n > 0 and 4**int(math.log(n, 4)) == n)  # Driver codeif __name__ == '__main__':     test_no = 64     if (isPowerOfFour(test_no)):        print(test_no, " is a power of 4")    else:        print(test_no, " is not a power of 4") # This code is contributed by vikkycirus
// C# program to check// if given number isusing System;class GFG{     static Boolean isPowerOfFour(int n){    return (n > 0 && Math.Pow(        4, (int)((Math.Log(n) /                  Math.Log(2)) /                 (Math.Log(4) /                  Math.Log(2)))) == n);} // Driver codepublic static void Main(String[] args){    int test_no = 64;         if (isPowerOfFour(test_no))        Console.WriteLine(test_no +         " is a power of 4");    else        Console.WriteLine(test_no +         " is not a power of 4");}} // This code is contributed by shivanisinghss2110
<script> // Javascript program to check// if given number is// power of 4 or notfunction isPowerOfFour(n){    return (n > 0 && Math.pow(4, (Math.log2(n) /                                 Math.log2(4)) == n));}         // Driver codelet test_no = 64; if (isPowerOfFour(test_no))    document.write(test_no +                   " is a power of 4");else    document.write(test_no +                   " is not a power of 4");                    // This code is contributed by avijitmondal1998 </script>
64 is a power of 4
Time Complexity: O(log4n)
Auxiliary Space: O(1)
7. A number ‘n’ is a power of 4 if  –
a) It is a perfect square
b) It is a power of two
Below is the implementation of the above idea.
C++
Java
Python3
C#
Javascript
// C++ program to check// if given number is// power of 4 or not#include<bits/stdc++.h>using namespace std; // Function to check perfect squarebool isPerfectSqaure(int n){    int x = sqrt(n);             return (x*x == n);} bool isPowerOfFour(int n){         // If n <= 0, it is not the power of four      if(n <= 0)      return false;       // Check whether 'n' is a perfect square or not    if(!isPerfectSqaure(n))        return false;               // If 'n' is the perfect square      // Check for the second condition i.e. 'n' must be power of two    return !(n & (n-1));}    /*Driver code*/int main(){    int test_no = 64;    if(isPowerOfFour(test_no))        cout << test_no << " is a power of 4" ;    else        cout << test_no << " is not a power of 4";    return 0;} // This code is contributed by Fiza Shaikh
// Java program to check// if given number is// power of 4 or notimport java.util.*; class GFG {     // Function to check perfect square    static boolean isPerfectSqaure(int n) {        int x = (int) Math.sqrt(n);         return (x * x == n);    }     static boolean isPowerOfFour(int n)    {               // If n <= 0, it is not the power of four        if (n <= 0)            return false;         // Check whether 'n' is a perfect square or not        if (!isPerfectSqaure(n))            return false;         // If 'n' is the perfect square        // Check for the second condition i.e. 'n' must be power of two        return (n & (n - 1)) != 1 ? true : false;    }     /* Driver code */    public static void main(String[] args) {        int test_no = 64;        if (isPowerOfFour(test_no))            System.out.print(test_no + " is a power of 4");        else            System.out.print(test_no + " is not a power of 4");    }} // This code is contributed by gauravrajput1
# Python program to check# if given number is# power of 4 or not# Function to check perfect square# import the math moduleimport math def isPerfectSqaure(n):    x = math.sqrt(n)    return (x*x == n)  def isPowerOfFour(n):           # If n <= 0, it is not the power of four      if(n <= 0):         return False         # Check whether 'n' is a perfect square or not      if(isPerfectSqaure(n)):         return False               # If 'n' is the perfect square      # Check for the second condition i.e. 'n' must be power of two      return (n & (n - 1))  # Driver codetest_no = 64if(isPowerOfFour(test_no)):        print(test_no ," is a power of 4")else:        print(test_no ," is not a power of 4") # This code is contributed by shivanisinghss2110
// C# program to check// if given number is// power of 4 or notusing System; public class GFG {     // Function to check perfect square    static bool isPerfectSqaure(int n) {        int x = (int) Math.Sqrt(n);         return (x * x == n);    }     static bool isPowerOfFour(int n)    {               // If n <= 0, it is not the power of four        if (n <= 0)            return false;         // Check whether 'n' is a perfect square or not        if (!isPerfectSqaure(n))            return false;         // If 'n' is the perfect square        // Check for the second condition i.e. 'n' must be power of two        return (n & (n - 1)) != 1 ? true : false;    }     /* Driver code */    public static void Main(String[] args) {        int test_no = 64;        if (isPowerOfFour(test_no))            Console.Write(test_no + " is a power of 4");        else            Console.Write(test_no + " is not a power of 4");    }} // This code is contributed by umadevi9616
<script> // JavaScript program to check// if given number is// power of 4 or not// Function to check perfect squarefunction isPerfectSqaure( n) {        var x = Math.sqrt(n);         return (x * x == n);    } function isPowerOfFour(n)    {               // If n <= 0, it is not the power of four        if (n <= 0)            return false;         // Check whether 'n' is a perfect square or not        if (!isPerfectSqaure(n))            return false;         // If 'n' is the perfect square        // Check for the second condition i.e. 'n' must be power of two        return (n & (n - 1)) != 1 ? true : false;    }     /* Driver code */        var test_no = 64;        if (isPowerOfFour(test_no))            document.write(test_no + " is a power of 4");        else            document.write(test_no + " is not a power of 4"); // This code is contributed by shivanisinghss2110 </script>
64 is a power of 4
Time Complexity: O(log2n)
Auxiliary Space: O(1)
Please write comments if you find any of the above codes/algorithms incorrect, or find other ways to solve the same problem
kisanrajesh
jit_t
Mithun Kumar
SoumikMondal
Shivi_Aggarwal
Vikramaditya Kukreja
mohit kumar 29
Rajput-Ji
yashbeersingh42
amit143katiyar
29AjayKumar
rishavmahato348
GauravRajput1
aashish1995
vikkycirus
simranarora5sos
ukasp
avijitmondal1998
rag2127
shivanisinghss2110
surindertarika1234
fizaashaikh
umadevi9616
subhammahato348
subham348
aakashrajak02
Bit Magic
Mathematical
Mathematical
Bit Magic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Find the element that appears once
Bits manipulation (Important tactics)
Set, Clear and Toggle a given bit of a number in C
Bit Fields in C
C++ bitset and its application
Program for Fibonacci numbers
Write a program to print all permutations of a given string
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7