# Find Kth smallest value for b such that a + b = a | b

• Difficulty Level : Easy
• Last Updated : 20 Feb, 2022

Given the numbers a and k, the task is to find the k’th smallest value for b such that a + b = a | b, where ‘|’ denotes the bitwise OR operator. The maximum value of a and k can be .

Examples:

```Input: a = 10, k = 3
Output: 5
Numbers satisfying the condition 5 + b = 5 | b
are 1, 4, 5, etc.
Since 3rd smallest value for b is required,
hence b = 5.

Input: a = 1, k = 1
Output: 2
Numbers satisfying the condition 1 + b = 1 | b
are 2, 4, 6, etc.
Since 1st smallest value for b is required,
hence b = 2.```

Approach:

• b is a solution of the given equation if and only if b has 0 in all positions where a has 1 (in binary notation).
• So, we need to determine the bit of b for positions where a has 0. Let, if a = 10100001 then the last eight digits of b must be b = 0*0****0, where ‘*’ denotes either 0 or 1. Any replacement of all ‘*’ by 0 or 1 gives us a solution.
• The k-th smallest number will be received by replacing all ‘*’ in y by digits of the binary representation of the number k.
• As the maximum value of a and k is , so checking up to 32 positions in binary representation is enough to get the correct answer for the given equation.

Below is the implementation of the above approach:

## CPP

 `// C++ program to find k'th smallest value for b``// such that a + b = a | b` `#include ``using` `namespace` `std;` `#define ll long long` `// Function to find``// the kth smallest value for b``ll kthSmallest(ll a, ll k)``{` `    ``// res will store final answer``    ``ll res = 0;``    ``ll j = 0;``    ``for` `(ll i = 0; i < 32; i++) {` `        ``// skip when j'th position``        ``// has 1 in binary representation``        ``// as in res, j'th position will be 0.` `        ``while` `(j < 32 && (a & (1 << j)))``            ``// j'th bit is set``            ``j++;` `        ``// if i'th bit of k is 1``        ``// and i'th bit of j is 0``        ``// then set i'th bit in res.` `        ``if` `(k & (1 << i)) ``// i'th bit is set``            ``res |= (1LL << j);` `        ``// proceed to next bit``        ``j++;``    ``}``    ``return` `res;``}` `// Driver Code``int` `main()``{` `    ``ll a = 10, k = 3;` `    ``cout << kthSmallest(a, k) << ``"\n"``;` `    ``return` `0;``}`

## Java

 `// Java program to find k'th smallest value for b``// such that a + b = a | b``class` `GFG``{` `    ``// Function to find``    ``// the kth smallest value for b``    ``static` `int` `kthSmallest(``int` `a, ``int` `k)``    ``{` `        ``// res will store final answer``        ``int` `res = ``0``;``        ``int` `j = ``0``;``        ``for` `(``int` `i = ``0``; i < ``32``; i++)``        ``{` `            ``// skip when j'th position``            ``// has 1 in binary representation``            ``// as in res, j'th position will be 0.``            ``while` `(j < ``32` `&& (a & (``1` `<< j)) > ``0``)``                ` `                ``// j'th bit is set``                ``j++;` `            ``// if i'th bit of k is 1``            ``// and i'th bit of j is 0``            ``// then set i'th bit in res.``            ``if` `((k & (``1` `<< i)) > ``0``) ``// i'th bit is set``                ``res |= (``1` `<< j);` `            ``// proceed to next bit``            ``j++;``        ``}``        ``return` `res;``    ``}` `    ``// Driver Code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `a = ``10``, k = ``3``;` `        ``System.out.print(kthSmallest(a, k) + ``"\n"``);``    ``}``}` `// This code is contributed by Rajput-Ji`

## Python

 `# Python3 program to find k'th smallest value for b``# such that a + b = a | b` `# Function to find``# the kth smallest value for b``def` `kthSmallest(a, k):` `    ``# res will store final answer``    ``res ``=` `0``    ``j ``=` `0``    ``for` `i ``in` `range``(``32``):` `        ``# skip when j'th position``        ``# has 1 in binary representation``        ``# as in res, j'th position will be 0.``        ``while` `(j < ``32` `and` `(a & (``1` `<< j))):``            ` `            ``# j'th bit is set``            ``j ``+``=` `1` `        ``# if i'th bit of k is 1``        ``# and i'th bit of j is 0``        ``# then set i'th bit in res.` `        ``if` `(k & (``1` `<< i)): ``# i'th bit is set``            ``res |``=` `(``1` `<< j)` `        ``# proceed to next bit``        ``j ``+``=` `1``    ``return` `res` `# Driver Code` `a ``=` `10``k ``=` `3` `print``(kthSmallest(a, k))` `# This code is contributed by mohit kumar 29`

## C#

 `// C# program to find k'th smallest value for b``// such that a + b = a | b``using` `System;` `class` `GFG``{` `    ``// Function to find``    ``// the kth smallest value for b``    ``static` `int` `kthSmallest(``int` `a, ``int` `k)``    ``{` `        ``// res will store final answer``        ``int` `res = 0;``        ``int` `j = 0;``        ``for` `(``int` `i = 0; i < 32; i++)``        ``{` `            ``// skip when j'th position``            ``// has 1 in binary representation``            ``// as in res, j'th position will be 0.``            ``while` `(j < 32 && (a & (1 << j)) > 0)``                ` `                ``// j'th bit is set``                ``j++;` `            ``// if i'th bit of k is 1``            ``// and i'th bit of j is 0``            ``// then set i'th bit in res.``            ``if` `((k & (1 << i)) > 0) ``// i'th bit is set``                ``res |= (1 << j);` `            ``// proceed to next bit``            ``j++;``        ``}``        ``return` `res;``    ``}` `    ``// Driver Code``    ``public` `static` `void` `Main()``    ``{``        ``int` `a = 10, k = 3;` `        ``Console.WriteLine(kthSmallest(a, k));``    ``}``}` `// This code is contributed by AnkitRai01`

## Javascript

 ``

Output:

`5`

Time Complexity: O(N)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up