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++
#include<iostream>
using namespace std;
#define bool int
class GFG
{
public : bool isPowerOfFour( int n)
{
if (n == 0)
return 0;
while (n != 1)
{
if (n % 4 != 0)
return 0;
n = n / 4;
}
return 1;
}
};
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 ();
}
|
C
#include<stdio.h>
#define bool int
bool isPowerOfFour( int n)
{
if (n == 0)
return 0;
while (n != 1)
{
if (n % 4 != 0)
return 0;
n = n / 4;
}
return 1;
}
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
class GFG {
static int isPowerOfFour( int n)
{
if (n == 0 )
return 0 ;
while (n != 1 )
{
if (n % 4 != 0 )
return 0 ;
n = n / 4 ;
}
return 1 ;
}
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" );
}
}
|
Python3
def isPowerOfFour(n):
if (n = = 0 ):
return False
while (n ! = 1 ):
if (n % 4 ! = 0 ):
return False
n = n / / 4
return True
test_no = 64
if (isPowerOfFour( 64 )):
print (test_no, 'is a power of 4' )
else :
print (test_no, 'is not a power of 4' )
|
C#
using System;
class GFG {
static int isPowerOfFour( int n)
{
if (n == 0)
return 0;
while (n != 1) {
if (n % 4 != 0)
return 0;
n = n / 4;
}
return 1;
}
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" );
}
}
|
PHP
<?php
function isPowerOfFour( $n )
{
if ( $n == 0)
return 0;
while ( $n != 1)
{
if ( $n % 4 != 0)
return 0;
$n = $n / 4;
}
return 1;
}
$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" ;
?>
|
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++
#include<bits/stdc++.h>
using namespace std;
bool isPowerOfFour(unsigned int n)
{
int count = 0;
if ( n && !(n&(n-1)) )
{
while (n > 1)
{
n >>= 1;
count += 1;
}
return (count%2 == 0)? 1 :0;
}
return 0;
}
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
#include<stdio.h>
#define bool int
bool isPowerOfFour(unsigned int n)
{
int count = 0;
if ( n && !(n&(n-1)) )
{
while (n > 1)
{
n >>= 1;
count += 1;
}
return (count%2 == 0)? 1 :0;
}
return 0;
}
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
import java.io.*;
class GFG
{
static int isPowerOfFour( int n)
{
int count = 0 ;
int x = n & (n - 1 );
if ( n > 0 && x == 0 )
{
while (n > 1 )
{
n >>= 1 ;
count += 1 ;
}
return (count % 2 == 0 ) ? 1 : 0 ;
}
return 0 ;
}
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" );
}
}
|
Python3
def isPowerOfFour(n):
count = 0
if (n and ( not (n & (n - 1 )))):
while (n > 1 ):
n >> = 1
count + = 1
if (count % 2 = = 0 ):
return True
else :
return False
test_no = 64
if (isPowerOfFour( 64 )):
print (test_no, 'is a power of 4' )
else :
print (test_no, 'is not a power of 4' )
|
C#
using System;
class GFG {
static int isPowerOfFour( int n)
{
int count = 0;
int x = n & (n-1);
if ( n > 0 && x == 0)
{
while (n > 1)
{
n >>= 1;
count += 1;
}
return (count % 2 == 0) ? 1 : 0;
}
return 0;
}
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);
}
}
|
PHP
<?php
function isPowerOfFour( $n )
{
$count = 0;
if ( $n && !( $n &( $n -1)) )
{
while ( $n > 1)
{
$n >>= 1;
$count += 1;
}
return ( $count %2 == 0)? 1 :0;
}
return 0;
}
$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
?>
|
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++
#include<bits/stdc++.h>
using namespace std;
bool isPowerOfFour(unsigned int n)
{
return n !=0 && ((n&(n-1)) == 0) && !(n & 0xAAAAAAAA);
}
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
#include<stdio.h>
#define bool int
bool isPowerOfFour(unsigned int n)
{
return n != 0 && ((n&(n-1)) == 0) && !(n & 0xAAAAAAAA);
}
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
import java.io.*;
class GFG {
static boolean isPowerOfFour( int n) {
return n != 0 && ((n&(n- 1 )) == 0 ) && (n & 0xAAAAAAAA ) == 0 ;
}
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
def isPowerOfFour(n):
return (n ! = 0 and
((n & (n - 1 )) = = 0 ) and
not (n & 0xAAAAAAAA ));
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" );
|
C#
using System;
class GFG
{
static bool isPowerOfFour( int n)
{
return n != 0 && ((n&(n-1)) == 0) &&
(n & 0xAAAAAAAA) == 0;
}
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);
}
}
|
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++
#include<bits/stdc++.h>
using namespace std;
float logn( int n, int r)
{
return log (n) / log (r);
}
bool isPowerOfFour( int n)
{
if (n == 0)
return false ;
return floor (logn(n,4))== ceil (logn(n,4));
}
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
import java.util.*;
class GFG{
static double logn( int n,
int r)
{
return Math.log(n) /
Math.log(r);
}
static boolean isPowerOfFour( int n)
{
if (n == 0 )
return false ;
return Math.floor(logn(n, 4 )) ==
Math.ceil(logn(n, 4 ));
}
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" );
}
}
|
Python3
import math
def logn(n, r):
return math.log(n) / math.log(r)
def isPowerOfFour(n):
if (n = = 0 ):
return False
return (math.floor(logn(n, 4 )) = =
math.ceil(logn(n, 4 )))
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" )
|
C#
using System;
class GFG{
static double logn( int n,
int r)
{
return Math.Log(n) /
Math.Log(r);
}
static bool isPowerOfFour( int n)
{
if (n == 0)
return false ;
return Math.Floor(logn(n, 4)) ==
Math.Ceiling(logn(n, 4));
}
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" );
}
}
|
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.