Open In App

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

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:  


Below is the implementation of the above approach:  



// 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 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

                    
# 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# 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

                    
<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)

Auxiliary Space: O(1)
 


Article Tags :