K-th smallest positive integer having sum with given number equal to bitwise OR with given number
Given two positive integers X and K, the task is to find the K-th smallest positive integer Y, such that X + Y = X | Y, where | denotes the bitwise OR operation.
Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.
Input: X = 5, K = 1
Explanation: The first number is 2 as (2 + 5 = 2 | 5 )
Input: X = 5, K = 5
Explanation: The list of correct values is 2, 8, 10, 16, 18. The 5th number is this list is 18
Approach: Given problem can be solved following the below mentioned steps:
- Let the final value be Y. From the properties of bitwise operations, it is known that X + Y = X & Y + X | Y, where & is a bitwise AND of two numbers
- For the equation in the problem statement to be true, the value of X & Y must be 0
- So for all positions, if the ith bit is ON in X then it must be OFF for all possible solutions of Y
- For instance, if X = 1001101001 in binary (617 in decimal notation), then the last ten digits of y must be Y= 0**00*0**0, where ‘*’ denotes either zero or one. Also, we can pad any number of any digits to the beginning of the number, since all higher bits are zeroes
- So the final solution will be to treat all the positions where the bit can be 0 or 1 as a sequence from left to right and find the binary notation of K.
- Fill all positions according to the binary notation of K
Below is the implementation of the above approach:
Time Complexity: O(log(N))
Auxiliary Space: O(1)