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

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

We strongly recommend that you click here and practice it, before moving on to the solution.

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

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


C

filter_none

edit
close

play_arrow

link
brightness_4
code

#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();
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to check if given
# number is power of 4 or not
 
# Function to check if x is power of 4
def isPowerOfFour(n):
    if (n == 0):
        return False
    while (n != 1):
            if (n % 4 != 0):
                return False
            n = n // 4
             
    return True
 
# Driver code
test_no = 64
if(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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# code to check if given
// number is power of 4 or not
using 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP code to check if given
// number is power of 4 or not
 
// Function to check if
// x is power of 4
function 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
?>

chevron_right


Output :

64 is a power of 4

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

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


C

filter_none

edit
close

play_arrow

link
brightness_4
code

#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();
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to check
// if given number is
// power of 4 or not
import 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to check if given
# number is power of 4 or not
 
# Function to check if x is power of 4
def 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 code
test_no = 64
if(isPowerOfFour(64)):
    print(test_no, 'is a power of 4')
else:
    print(test_no, 'is not a power of 4')
 
# This code is contribued by Danish Raza

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to check if given
// number is power of 4 or not
using 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:



64 is a power of 4

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 0xAAAAAAAA
For 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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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";
}

chevron_right


C

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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();
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to check
// if given number is
// power of 4 or not
import 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");
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to check
# if given number is
# power of 4 or not
def isPowerOfFour(n):
    return (n != 0 and
          ((n & (n - 1)) == 0) and
            not(n & 0xAAAAAAAA));
 
# Driver code
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 contributed by Rajput-Ji

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to check
// if given number is
// power of 4 or not
using 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

chevron_right


Output:

64 is a power of 4

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to check
// if given number is
// power of 4 or not
import 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 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 Amit Katiyar

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to check
# if given number is
# power of 4 or not
import 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 code
if __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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to check
// if given number is
// power of 4 or not
using 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 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 29AjayKumar

chevron_right


Output:

64 is a power of 4

Please write comments if you find any of the above codes/algorithms incorrect, or find other ways to solve the same problem.
 

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

Article Tags :
Practice Tags :


12


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.