Count the no of Set Bits between L and R for only prime positions in Python
You are given two integers- lower limit(L) and upper limit(R). You have to find the no of set bits in the binary representation of the numbers between L and R (both inclusive) for only prime positions.
Eg. L=0, R=7
Output:
8
The explanation is for only 9 bits. But we will implement for 32 bits. So, now we will see how to solve the problem.
Counting the no of Set Bits between L and R for only prime positions
We will see the algorithm, program and time complexity of the program.
Algorithm for optimal solution:
- Take the prime positions up to 32 in a list.
- You can notice that for position 2, for every 4 (i.e 2^2) numbers there are 2 (i.e 2^1) set bits. Similarly, for position 3, for every 8 (i.e 2^3) numbers there are 4 (i.e 2^2) set bits and so on. So, for the position n, for every 2^n numbers, there are 2^(n-1) set bits.
- Following the above logic, you have to calculate the total no of set bits for every prime position from 0 to R and 0 to (L-1).
- Now, Subtract the two results to get the actual output.
Python Program for the problem:
prime_pos=[2,3,5,7,11,13,17,19,23,29,31] #List of prime positions
lower=int(input("Enter lower limit: ")) #Take Lower limit from user
upper=int(input("Enter upper limit: "))#Take Upper limit from user
def calculate(n):
tot_set_bit=0
for i in prime_pos: #Iterate for every prime position
cycle=2**i
set_bit=cycle//2
tot_set_bit+=((n+1)//cycle)*set_bit
if((n+1)%cycle>set_bit):
tot_set_bit+=(n+1)%cycle-set_bit
return tot_set_bit
''' Call the function for R(upper) and for (L-1)(lower) and subtract the result'''
print("The no of set bits:",calculate(upper)-calculate(lower-1))
Input/Output:
1.
Enter lower limit: 0 Enter upper limit: 7 The no of set bits: 8
2.
Enter lower limit: 4 Enter upper limit: 20 The no of set bits: 22
The code is only the implementation of the above algorithm. In the above code, tot_set_bit counts the total no of set bits. For every 2^n numbers (denoted by the variable cycle) there are 2^(n-1) set bits (denoted by set_bit) where n denotes the prime position.
Time Complexity:
O(1)
You may also read:
Leave a Reply