Given a positive integer, write a function to find if it is a power of two or not.
Examples :
Input : n = 4
Output : Yes
22 = 4
Input : n = 7
Output : No
Input : n = 32
Output : Yes
25 = 32
1. A simple method for this is to simply take the log of the number on base 2 and if you get an integer then the number is the power of
C++
#include<bits/stdc++.h>
using namespace std;
bool isPowerOfTwo( int n)
{
if (n==0)
return false ;
return ( ceil (log2(n)) == floor (log2(n)));
}
int main()
{
isPowerOfTwo(31)? cout<< "Yes" <<endl: cout<< "No" <<endl;
isPowerOfTwo(64)? cout<< "Yes" <<endl: cout<< "No" <<endl;
return 0;
}
|
C
#include<stdio.h>
#include<stdbool.h>
#include<math.h>
bool isPowerOfTwo( int n)
{
if (n==0)
return false ;
return ( ceil (log2(n)) == floor (log2(n)));
}
int main()
{
isPowerOfTwo(31)? printf ( "Yes\n" ): printf ( "No\n" );
isPowerOfTwo(64)? printf ( "Yes\n" ): printf ( "No\n" );
return 0;
}
|
Java
class GFG
{
static boolean isPowerOfTwo( int n)
{
if (n== 0 )
return false ;
return ( int )(Math.ceil((Math.log(n) / Math.log( 2 )))) ==
( int )(Math.floor(((Math.log(n) / Math.log( 2 )))));
}
public static void main(String[] args)
{
if (isPowerOfTwo( 31 ))
System.out.println( "Yes" );
else
System.out.println( "No" );
if (isPowerOfTwo( 64 ))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Python3
import math
def Log2(x):
if x = = 0 :
return false;
return (math.log10(x) /
math.log10( 2 ));
def isPowerOfTwo(n):
return (math.ceil(Log2(n)) = =
math.floor(Log2(n)));
if (isPowerOfTwo( 31 )):
print ( "Yes" );
else :
print ( "No" );
if (isPowerOfTwo( 64 )):
print ( "Yes" );
else :
print ( "No" );
|
C#
using System;
class GFG
{
static bool isPowerOfTwo( int n)
{
if (n==0)
return false ;
return ( int )(Math.Ceiling((Math.Log(n) /
Math.Log(2)))) ==
( int )(Math.Floor(((Math.Log(n) /
Math.Log(2)))));
}
public static void Main()
{
if (isPowerOfTwo(31))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
if (isPowerOfTwo(64))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
}
|
PHP
<?php
function Log2( $x )
{
return (log10( $x ) /
log10(2));
}
function isPowerOfTwo( $n )
{
return ( ceil (Log2( $n )) ==
floor (Log2( $n )));
}
if (isPowerOfTwo(31))
echo "Yes\n" ;
else
echo "No\n" ;
if (isPowerOfTwo(64))
echo "Yes\n" ;
else
echo "No\n" ;
?>
|
Output:
No
Yes
2. Another solution is to keep dividing the number by two, i.e, do n = n/2 iteratively. In any iteration, if n%2 becomes non-zero and n is not 1 then n is not a power of 2. If n becomes 1 then it is a power of 2.
C++
#include <bits/stdc++.h>
using namespace std;
bool isPowerOfTwo( int n)
{
if (n == 0)
return 0;
while (n != 1)
{
if (n%2 != 0)
return 0;
n = n/2;
}
return 1;
}
int main()
{
isPowerOfTwo(31)? cout<< "Yes\n" : cout<< "No\n" ;
isPowerOfTwo(64)? cout<< "Yes\n" : cout<< "No\n" ;
return 0;
}
|
C
#include<stdio.h>
#include<stdbool.h>
bool isPowerOfTwo( int n)
{
if (n == 0)
return 0;
while (n != 1)
{
if (n%2 != 0)
return 0;
n = n/2;
}
return 1;
}
int main()
{
isPowerOfTwo(31)? printf ( "Yes\n" ): printf ( "No\n" );
isPowerOfTwo(64)? printf ( "Yes\n" ): printf ( "No\n" );
return 0;
}
|
Java
import java.io.*;
class GFG {
static boolean isPowerOfTwo( int n)
{
if (n == 0 )
return false ;
while (n != 1 )
{
if (n % 2 != 0 )
return false ;
n = n / 2 ;
}
return true ;
}
public static void main(String args[])
{
if (isPowerOfTwo( 31 ))
System.out.println( "Yes" );
else
System.out.println( "No" );
if (isPowerOfTwo( 64 ))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Python3
def isPowerOfTwo(n):
if (n = = 0 ):
return False
while (n ! = 1 ):
if (n % 2 ! = 0 ):
return False
n = n / / 2
return True
if (isPowerOfTwo( 31 )):
print ( 'Yes' )
else :
print ( 'No' )
if (isPowerOfTwo( 64 )):
print ( 'Yes' )
else :
print ( 'No' )
|
C#
using System;
class GFG
{
static bool isPowerOfTwo( int n)
{
if (n == 0)
return false ;
while (n != 1) {
if (n % 2 != 0)
return false ;
n = n / 2;
}
return true ;
}
public static void Main()
{
Console.WriteLine(isPowerOfTwo(31) ? "Yes" : "No" );
Console.WriteLine(isPowerOfTwo(64) ? "Yes" : "No" );
}
}
|
PHP
<?php
function isPowerOfTwo( $n )
{
if ( $n == 0)
return 0;
while ( $n != 1)
{
if ( $n % 2 != 0)
return 0;
$n = $n / 2;
}
return 1;
}
if (isPowerOfTwo(31))
echo "Yes\n" ;
else
echo "No\n" ;
if (isPowerOfTwo(64))
echo "Yes\n" ;
else
echo "No\n" ;
?>
|
Output :
No
Yes
3. Another way is to use this simple recursive solution. It uses the same logic as the above iterative solution but uses recursion instead of iteration.
C++
#include <bits/stdc++.h>
using namespace std;
bool powerOf2( int n)
{
if (n == 1)
return true ;
else if (n % 2 != 0 || n ==0)
return false ;
return powerOf2(n / 2);
}
int main()
{
int n = 64;
int m = 12;
if (powerOf2(n) == 1)
cout << "True" << endl;
else cout << "False" << endl;
if (powerOf2(m) == 1)
cout << "True" << endl;
else
cout << "False" << endl;
}
|
Java
import java.util.*;
class GFG{
static boolean powerOf2( int n)
{
if (n == 1 )
return true ;
else if (n % 2 != 0 ||
n == 0 )
return false ;
return powerOf2(n / 2 );
}
public static void main(String[] args)
{
int n = 64 ;
int m = 12 ;
if (powerOf2(n) == true )
System.out.print( "True" + "\n" );
else System.out.print( "False" + "\n" );
if (powerOf2(m) == true )
System.out.print( "True" + "\n" );
else
System.out.print( "False" + "\n" );
}
}
|
Python3
def powerof2(n):
if n = = 1 :
return True
elif n % 2 ! = 0 or n = = 0 :
return False
return powerof2(n / 2 )
if __name__ = = "__main__" :
print (powerof2( 64 ))
print (powerof2( 12 ))
|
C#
using System;
class GFG{
static bool powerOf2( int n)
{
if (n == 1)
return true ;
else if (n % 2 != 0 || n == 0)
return false ;
return powerOf2(n / 2);
}
static void Main()
{
int n = 64;
int m = 12;
if (powerOf2(n))
{
Console.Write( "True" + "\n" );
}
else
{
Console.Write( "False" + "\n" );
}
if (powerOf2(m))
{
Console.Write( "True" );
}
else
{
Console.Write( "False" );
}
}
}
|
4. All power of two numbers has only a one-bit set. So count the no. of set bits and if you get 1 then the number is a power of 2. Please see Count set bits in an integer for counting set bits.
5. If we subtract a power of 2 numbers by 1 then all unset bits after the only set bit become set; and the set bit becomes unset.
For example for 4 ( 100) and 16(10000), we get the following after subtracting 1
3 –> 011
15 –> 01111
So, if a number n is a power of 2 then bitwise & of n and n-1 will be zero. We can say n is a power of 2 or not based on the value of n&(n-1). The expression n&(n-1) will not work when n is 0. To handle this case also, our expression will become n& (!n&(n-1)) (thanks to https://www.geeksforgeeks.org/program-to-find-whether-a-no-is-power-of-two/Mohammad for adding this case).
Below is the implementation of this method.
C++
#include <bits/stdc++.h>
using namespace std;
#define bool int
bool isPowerOfTwo ( int x)
{
return x && (!(x&(x-1)));
}
int main()
{
isPowerOfTwo(31)? cout<< "Yes\n" : cout<< "No\n" ;
isPowerOfTwo(64)? cout<< "Yes\n" : cout<< "No\n" ;
return 0;
}
|
C
#include<stdio.h>
#define bool int
bool isPowerOfTwo ( int x)
{
return x && (!(x&(x-1)));
}
int main()
{
isPowerOfTwo(31)? printf ( "Yes\n" ): printf ( "No\n" );
isPowerOfTwo(64)? printf ( "Yes\n" ): printf ( "No\n" );
return 0;
}
|
Java
class Test
{
static boolean isPowerOfTwo ( int x)
{
return x!= 0 && ((x&(x- 1 )) == 0 );
}
public static void main(String[] args)
{
System.out.println(isPowerOfTwo( 31 ) ? "Yes" : "No" );
System.out.println(isPowerOfTwo( 64 ) ? "Yes" : "No" );
}
}
|
Python
def isPowerOfTwo (x):
return (x and ( not (x & (x - 1 ))) )
if (isPowerOfTwo( 31 )):
print ( 'Yes' )
else :
print ( 'No' )
if (isPowerOfTwo( 64 )):
print ( 'Yes' )
else :
print ( 'No' )
|
C#
using System;
class GFG
{
static bool isPowerOfTwo ( int x)
{
return x != 0 && ((x & (x - 1)) == 0);
}
public static void Main()
{
Console.WriteLine(isPowerOfTwo(31) ? "Yes" : "No" );
Console.WriteLine(isPowerOfTwo(64) ? "Yes" : "No" );
}
}
|
PHP
<?php
function isPowerOfTwo ( $x )
{
return $x && (!( $x & ( $x - 1)));
}
if (isPowerOfTwo(31))
echo "Yes\n" ;
else
echo "No\n" ;
if (isPowerOfTwo(64))
echo "Yes\n" ;
else
echo "No\n" ;
?>
|
Output :
No
Yes
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
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.