Python | Count set bits in a range
Given a non-negative number n and two values l and r. The problem is to count the number of set bits in the range l to r in the binary representation of n, i.e, to count set bits from the rightmost lth bit to the rightmost rth bit.
Constraint: 1 <= l <= r <= number of bits in the binary representation of n.
Examples:
Input : n = 42, l = 2, r = 5 Output : 2 (42)10 = (101010)2 There are '2' set bits in the range 2 to 5. Input : n = 79, l = 1, r = 4 Output : 4
We have existing solution for this problem please refer Count set bits in a range link. We can solve this problem quickly in Python. Approach is very simple,
- Convert decimal into binary using bin(num) function.
- Now remove first two characters of output binary string because bin function appends ‘0b’ as prefix in output string by default.
- Slice string starting from index (l-1) to index r and reverse it, then count set bits in between.
# Function to count set bits in a range def countSetBits(n,l,r): # convert n into it's binary binary = bin(n) # remove first two characters binary = binary[2:] # reverse string binary = binary[-1::-1] # count all set bit '1' starting from index l-1 # to r, where r is exclusive print (len([binary[i] for i in range(l-1,r) if binary[i]=='1'])) # Driver program if __name__ == "__main__": n=42 l=2 r=5 countSetBits(n,l,r) |
Output:
2
Recommended Posts:
- Python | Count unset bits in a range
- Count set bits in a range
- Count unset bits in a range
- Range query for count of set bits
- Count number of set bits in a range using bitset
- Python Bin | Count total bits in a number
- Count set bits using Python List comprehension
- Python map function | Count total set bits in all numbers from 1 to n
- Check if bits of a number has count of consecutive set bits in increasing order
- Unset bits in the given range
- Check whether all the bits are set in the given range
- Set all the bits in given range of a number
- Toggle bits in the given range
- Copy set bits in a range
- Set bits in N equals to M in the given range.
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



