Horje
Minimum Bitwise AND operations to make two numbers equal

Given two numbers a and b, the task is to find the minimum number of operations required to make a and b equal. In each operation, we can pick a non-negative integer x and either a or b. If a is chosen, we replace a with the bitwise AND (&) of a and x. If b is chosen, we replace b with the bitwise AND of b and x. The goal is to perform the minimum number of operations to make a and b equal.

Examples:

Input: a = 5, b = 12
Output: 2
Explanation: In the first operation replace a = a&4 = 4 after that replace b = b&6 = 4. Hence both are same after applying two operations.

Input: a = 100, b = 100
Output: 0
Explanation: Already the same.

Approach: To solve this problem, we can follow the following observations:

Observations:

  • If a is equal to b, we don’t need to perform any operations. In this case, we return 0.
  • If either a or b is zero, we can make them equal by performing the AND operation of the non-zero digit with zero. Since this requires one operation, we return 1.
  • If the result of the AND operation between a and b is equal to either a or b, it means all the set bits in the result are also set in either a or b. In this case, we can make a and b equal by performing one operation. We return 1.
  • If none of the above conditions are met, the differing bits between a and b cannot be eliminated in one operation. In the worst case, we must perform two operations to make them equal. Therefore, we return 2.

Below is the implementation for the above approach::

C++

// C++ code for the aboeva pproach:
#include <bits/stdc++.h>
using namespace std;
 
int solve(int a, int b)
{
   
    // If a and b are equal,
    // no operations required
    if (a == b)
        return 0;
 
    // If either a or b is zero,
    // perform one operation
    if (a == 0 || b == 0)
        return 1;
 
    // Calculate the bitwise
    // AND of a and b
    int x = a & b;
 
    // If x is equal to either a or b,
    // perform one operation
    if (a == x || b == x)
        return 1;
 
    // Otherwise, perform two operations
    return 2;
}
 
// Drivers code
int main()
{
    int a = 5, b = 12;
 
    // Function call
    int result = solve(a, b);
    cout << result << endl;
 
    return 0;
}

Java

public class Main {
    public static int solve(int a, int b)
    {
        // If a and b are equal,
        // no operations required
        if (a == b)
            return 0;
 
        // If either a or b is zero,
        // perform one operation
        if (a == 0 || b == 0)
            return 1;
 
        // Calculate the bitwise AND of a and b
        int x = a & b;
 
        // If x is equal to either a
        // or b, perform one operation
        if (a == x || b == x)
            return 1;
 
        // Otherwise, perform two operations
        return 2;
    }
 
    public static void main(String[] args)
    {
        int a = 5, b = 12;
 
        // Function Call
        int result = solve(a, b);
        System.out.println(result);
    }
}
// This code is contributed by Jeetu Bangari

Python3

def solve(a, b):
 
  # If a and b are equal,
  # no operations required
    if a == b:
        return 0
 
# If either a or b is zero,
# perform one operation
    if a == 0 or b == 0:
        return 1
 
# Calculate the bitwise
# AND of a and b
    x = a & b
 
  # If x is equal to either a or b,
  # perform one operation
    if a == x or b == x:
        return 1
 
# Otherwise, perform two operations
    return 2
 
 
a = 5
b = 12
 
# Function Call
result = solve(a, b)
print(result)
# This code is contributed by Jeetu Bangari

C#

using System;
 
class GFG
{
    static int Solve(int a, int b)
    {
        // If a and b are equal,
        // no operations required
        if (a == b)
            return 0;
 
        // If either a or b is zero,
        // perform one operation
        if (a == 0 || b == 0)
            return 1;
 
        // Calculate the bitwise
        // AND of a and b
        int x = a & b;
 
        // If x is equal to either a or b,
        // perform one operation
        if (a == x || b == x)
            return 1;
 
        // Otherwise, perform two operations
        return 2;
    }
 
    // Driver code
    static void Main(string[] args)
    {
        int a = 5, b = 12;
 
        // Function call
        int result = Solve(a, b);
        Console.WriteLine(result);
 
        Console.ReadLine();
    }
}

Javascript

function solve(a, b) {
 
// If a and b are equal, no operations required
    if (a === b)
        return 0;
         
// If either a or b is zero, perform one operation
    if (a === 0 || b === 0)
        return 1;
 
// Calculate the bitwise AND of a and b
    let x = a & b;
     
 // If x is equal to either a or b, perform one operation
    if (a === x || b === x)
        return 1;
         
// Otherwise, perform two operations
    return 2;
}
 
let a = 5;
let b = 12;
 
//Function call
let result = solve(a, b);
console.log(result);
// This code is contributed by Jeetu Bangari

Output

2




Time Complexity: O(1), as it takes constant time.
Auxiliary space: O(1), as it uses constant space.




Reffered: https://www.geeksforgeeks.org


Bit Magic

Related
Maximize sum of three numbers by performing bitwise XOR Maximize sum of three numbers by performing bitwise XOR
Store two numbers in one Byte using Bit manipulation Store two numbers in one Byte using Bit manipulation
Number of unique pairs whose bitwise XOR and OR are same Number of unique pairs whose bitwise XOR and OR are same
Find winner of the game when any set bit is removed in each move Find winner of the game when any set bit is removed in each move
JavaScript program to check whether a given number is power of 2 JavaScript program to check whether a given number is power of 2

Type:
Geek
Category:
Coding
Sub Category:
Tutorial
Uploaded by:
Admin
Views:
16