- Bit Magic, Bitwise-AND, Bitwise-OR, Greedy, Mathematical

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)Examples:Input: X = 5, K = 1Output: 2Explanation: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 = 5Output: 18Approach: The given problem can be solved by below observation: (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 righmost 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 2If the current bit of X is 0 and righmost 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 2If 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:C++#include using namespace std;long long KthSolution(long long X,                      long long K){              long long ans = 0;    for (int i = 0; i < 64; i++) {                       if (!(X & (1LL = 1;                        if (!K) {                break;            }        }    }    return ans;}int main(){    long long X = 10, K = 5;    cout = 1;                                if (K == 0) {                    break;                }            }        }        return ans;    }           public static void main(String[] args)    {        long X = 10;        long K = 5;        System.out.println(KthSolution(X, K));    }}Javascript                    function KthSolution(X,K){              let ans = 0;    for (let i = 0; i < 64; i++) {                       if (!(X & (1 = 1;                        if (!K) {                break;            }        }    }    return ans;}    let X = 10, K = 5;    document.write(KthSolution(X, K));          Output: 17Time Complexity: O(log(X))Auxiliary Space: O(1)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.In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.