Kth smallest positive integer Y such that its sum with X is same as its bitwise OR with X
Given two positive integers X and K, the task is to find the Kth smallest positive integer (Y) such that the sum of X and Y is equal to Bitwise OR of X and Y, i.e. (X + Y = X | Y)
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. 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
Consider the smallest number as 2. The sum of 2 and 5 is 2 + 5 = 7 and the Bitwise OR of 2 and 5 is 7.
Input: X = 5, K = 5
Approach: The given problem can be solved by below observation:
- Using the properties of bitwise operator on two numbers X and Y:
(X + Y) = (X & Y) + (X | Y)
- Therefore, for the value of X + Y to be same as X | Y, the value of X & Y must be 0.
- Also, we know that for X & Y to be 0, the position of set bits in X must be unset in Y, and the positions of unset bits of X can be either 0 or 1 in Y.
- Hence, to find Kth smallest positive number meeting above conditions, we can use combinations for the bit positions of Y that are unset in X.
To implement the above, iterate the binary representation of X from right to left, and at every iteration, consider the following cases:
- If the current bit of X is 1, the corresponding bit in Y will be 0, to get (X & Y) as 0.
- If the current bit of X is 0 and rightmost bit of K is 1, the corresponding bit of Y will be 1. This means that two combinations at current bit in Y has been used – first 0 and then 1. Then divide K by 2
- If the current bit of X is 0 and rightmost bit of K is 0, the corresponding bit of Y will be 0. This means that only one combination at current bit in Y has been used – 0. Then divide K by 2
- If K becomes 0, break the loop, stating that the Kth number has been found.
Finally, print the decimal conversion of Y as the required answer.
Below is the implementation of the above approach:
Time Complexity: O(log(X))
Auxiliary Space: O(1)