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 = 3Output: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 = 1Output: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 <bits/stdc++.h>` `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 wiint 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 wiint 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 wistore 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 wibe 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 wiint 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 wiint 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

`<script>` `// Javascript program to find k'th smallest value for b` `// such that a + b = a | b` `// Function to find` `// the kth smallest value for b` `function` `kthSmallest(a, k)` `{` ` ` `// res will store final answer` ` ` `var` `res = 0;` ` ` `var` `j = 0;` ` ` `for` `(` `var` `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 |= (1 << j);` ` ` `// proceed to next bit` ` ` `j++;` ` ` `}` ` ` `return` `res;` `}` `// Driver Code` `var` `a = 10, k = 3;` `document.write( kthSmallest(a, k));` `</script>` |

**Output:**

5

**Time Complexity:** O(N)

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 industry experts, please refer **Geeks Classes Live**