In this tutorial, the power of 2 or not for python programming can be checked. The user gives a positive integer N and we have to check if it is equivalent to 2^x or not, where x can be zero or a number positive.
Examples:
Example1:
Input:
given number =2048
Output:
The given numb 2048 is power of 2
Example2:
Input:
given number =256
Output:
The given numb 256 is power of 2
Example3:
Input:
given number =678
Output:
The given numb 678 is not power of 2
Program to Find Whether a Number is a Power of Two in Python
There are several ways to check whether the given number is a power of 2 or not some of them are:
Drive into Python Programming Examples and explore more instances related to python concepts so that you can become proficient in generating programs in Python Programming Language.
Method #1:Using log function
- This answer is just a mathematical one.
- If the log2(n) of the given number n is integer than it is power of 2
- Else it is not power of 2.
Below is the implementation:
# importing log from math
from math import log
# given number
numb = 2048
# given base (here it is 2 as we have to check whether it is power of 2 or not)
bas = 2
# calculating log2 of the given numb using log function
logvalue = log(numb, bas)
# if the value is integer then it is power of 2
if (int(logvalue) == logvalue):
print("The given numb", numb, "is power of 2")
# else it is not power of 2
else:
print("The given numb", numb, "is not power of 2")
Output:
The given numb 2048 is power of 2
Method #2:Using while loop
Continue dividing the number into two, i.e. do n = n/2 as long as n is 1 If n percent 2 is non-zero and n is not 1 in all iteration, then n is not 2. It is a power of 2, if n becomes 1.
Below is the implementation:
# function which returns true if the given number is power of 2 else it reeturns false
def checktwoPower(numb):
# checking if the number is 0
if (numb == 0):
# if the number is 0 then it is not power of 2 hence return false
return False
# using while loop to iterate till the number not equal to 1
while (numb != 1):
# if the bit is set bit then it is not power of 2 so return False
if (numb % 2 != 0):
return False
# dividing n
numb = numb // 2
return True
# given number
numb = 2048
# passing the given number to checktwoPower function
# if the value is integer then it is power of 2
if (checktwoPower(numb)):
print("The given numb", numb, "is power of 2")
# else it is not power of 2
else:
print("The given numb", numb, "is not power of 2")
Output:
The given numb 2048 is power of 2
Method #3:Using Bitwise Operators
If the number is 2 power, the binary representation of only 1 bit is set.
If we remove 1 from a power number 2, then all the bits are set and the set bit is unset after the set bits (just one bits are set according to point-1)
Therefore, if a number is 2, then
numb&(numb-1) == 0
Only if N is zero is the exception to the foregoing rule. As a power of two, it will give zero which in fact is not. Therefore, we can explicitly see this in the check.
Below is the implementation:
# function which returns true if the given number is power of 2 else it reeturns false
def checktwoPower(numb):
return numb and (not(numb & (numb-1)))
# given number
numb = 2048
# passing the given number to checktwoPower function
# if the value is integer then it is power of 2
if (checktwoPower(numb)):
print("The given numb", numb, "is power of 2")
# else it is not power of 2
else:
print("The given numb", numb, "is not power of 2")
Output:
The given numb 2048 is power of 2
Method #4:By Calculating total number of set bits
A simple method is to take each bit into consideration in a number (set or unset) and hold a counter to track the set bits if the total number of set bits is 1 then the number is power of 2 else it is not the power of 2
Approach:
- Set the variable to say count to 0 to count the total number of set bits.
- We utilize the while loop.
- We’ll keep going till the number is bigger than zero (Condition of while statement)
- Using the & operator, we will determine whether the last check bit is set or not.
- If the check bit is 1, it indicates that the bit is set, and we increment the count.
- Divide the given number by 2.
- If the count is 1 then it is the power of 2 hence return true
- Else return false
We use n&1 to check whether it is set bit or not.
Below is the implementation:
# function which returns true if the given number is power of 2 else it reeturns false
def checktwoPower(numb):
# checking if the given number is greater than 1
if numb > 1:
# Set the variable say setbitcount to 0 to count the total number of set bits.
setbitcount = 0
# looping till number greater than 0 using while loop
while(numb > 0):
# We will get the last check bit whether it is set bit or not using & operator
# checking if the check bit is 1 or not
# if the check bit is 1 then increment the setbitcount
if(numb & 1):
setbitcount = setbitcount+1
# divide the number by 2
numb = numb//2
# checking if the total number of setbits are 1 or not
return (setbitcount == 1)
# given number
numb = 2048
# passing the given number to checktwoPower function
# if the value is integer then it is power of 2
if (checktwoPower(numb)):
print("The given numb", numb, "is power of 2")
# else it is not power of 2
else:
print("The given numb", numb, "is not power of 2")
Output:
The given numb 2048 is power of 2
Related Programs:
