Open In App

Number of values of b such that a = b + (a^b)

Last Updated : 20 Aug, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

Given an integer a        . Find the number of solutions of b        which satisfies the equation: 

a = b + (a^b)


Examples: 

Input: a = 4 
Output: 2
The only values of b are 0 and 4 itself.

Input: a = 3 
Output: 4 

A naive solution is to iterate from 0 to a        and count the number of values that satisfies the given equation. We need to traverse only till a        since any value greater than a        will give the XOR value > a        , hence cannot satisfy the equation.

Below is the implementation of the above approach:  

C++
// C++ program to find the number of values
// of b such that a = b + (a^b)
#include <bits/stdc++.h>
using namespace std;

// function to return the number of solutions
int countSolutions(int a)
{
    int count = 0;

    // check for every possible value
    for (int i = 0; i <= a; i++) {
        if (a == (i + (a ^ i)))
            count++;
    }

    return count;
}

// Driver Code
int main()
{
    int a = 3;
    cout << countSolutions(a);
}
Java
// Java program to find the number of values
// of b such that a = b + (a^b)

import java.io.*;

class GFG {


// function to return the number of solutions
 static int countSolutions(int a)
{
    int count = 0;

    // check for every possible value
    for (int i = 0; i <= a; i++) {
        if (a == (i + (a ^ i)))
            count++;
    }

    return count;
}

// Driver Code


    public static void main (String[] args) {
        int a = 3;
    System.out.println( countSolutions(a));
    }
}
// This code is contributed by inder_verma
Python3
# Python 3 program to find 
# the number of values of b
# such that a = b + (a^b)

# function to return the 
# number of solutions
def countSolutions(a):

    count = 0

    # check for every possible value
    for i in range(a + 1):
        if (a == (i + (a ^ i))):
            count += 1

    return count

# Driver Code
if __name__ == "__main__":
    a = 3
    print(countSolutions(a))

# This code is contributed
# by ChitraNayal
C#
// C# program to find the number of 
// values of b such that a = b + (a^b)
using System;

class GFG 
{

// function to return the
// number of solutions
static int countSolutions(int a)
{
    int count = 0;

    // check for every possible value
    for (int i = 0; i <= a; i++) 
    {
        if (a == (i + (a ^ i)))
            count++;
    }

    return count;
}

// Driver Code
public static void Main () 
{
    int a = 3;
    Console.WriteLine(countSolutions(a));
}
}

// This code is contributed by inder_verma
PHP
<?php
// PHP program to find the number of 
// values of b such that a = b + (a^b)

// function to return the 
// number of solutions
function countSolutions($a)
{
    $count = 0;

    // check for every possible value
    for ($i = 0; $i <= $a; $i++) 
    {
        if ($a == ($i + ($a ^ $i)))
            $count++;
    }

    return $count;
}

// Driver Code
$a = 3;
echo countSolutions($a);

// This code is contributed 
// by inder_verma
?>
JavaScript
<script>

// Javascript program to find the number of values
// of b such that a = b + (a^b)

// function to return the number of solutions
function countSolutions(a)
{
    let count = 0;

    // check for every possible value
    for (let i = 0; i <= a; i++) {
        if (a == (i + (a ^ i)))
            count++;
    }

    return count;
}

// Driver Code
let a = 3;
document.write(countSolutions(a));

</script>

Output: 
4

 

Time Complexity: O(a), since there runs a loop for a times.
Auxiliary Space: O(1), since no extra space has been taken.

An Efficient Approach is to observe a pattern of answers when we write the possible solutions for different values of a        . Only the set bits are used to determine the number of possible answers. The answer to the problem will always be 2^(number of set bits) which can be determined by observation. 

Below is the implementation of the above approach:  

C++
// C++ program to find the number of values
// of b such that a = b + (a^b)
#include <bits/stdc++.h>
using namespace std;

// function to return the number of solutions
int countSolutions(int a)
{
    int count = __builtin_popcount(a);

    count = pow(2, count);
    return count;
}

// Driver Code
int main()
{
    int a = 3;
    cout << countSolutions(a);
}
Java
// Java program to find the number of values
// of b such that a = b + (a^b)
import java.io.*;
class GFG
{
 
    // function to return the number of solutions
    static int countSolutions(int a)
    {
        int count = Integer.bitCount(a);
     
        count =(int) Math.pow(2, count);
        return count;
    }
     
    // Driver Code
        public static void main (String[] args) 
    {
        int a = 3;
        System.out.println(countSolutions(a));
    }
}
// This code is contributed by Raj
Python3
# Python3 program to find the number 
# of values of b such that a = b + (a^b) 

# function to return the number 
# of solutions 
def countSolutions(a): 

    count = bin(a).count('1') 
    return 2 ** count 

# Driver Code 
if __name__ == "__main__":

    a = 3
    print(countSolutions(a)) 

# This code is contributed by
# Rituraj Jain
C#
// C# program to find the number of 
// values of b such that a = b + (a^b)
class GFG
{

// function to return the number 
// of solutions
static int countSolutions(int a)
{
    int count = bitCount(a);

    count =(int) System.Math.Pow(2, count);
    return count;
}

static int bitCount(int n)
{
    int count = 0;
    while (n != 0)
    {
        count++;
        n &= (n - 1);
    }
    return count;
}

// Driver Code
public static void Main() 
{
    int a = 3;
    System.Console.WriteLine(countSolutions(a));
}
}

// This code is contributed by mits
PHP
<?php
// PHP program to find the number of 
// values of b such that a = b + (a^b)

// function to return the number 
// of solutions
function countSolutions($a)
{
    $count = bitCount($a);

    $count = (int)pow(2, $count);
    return $count;
}

function bitCount($n)
{
    $count = 0;
    while ($n != 0)
    {
        $count++;
        $n &= ($n - 1);
    }
    return $count;
}

// Driver Code
$a = 3;
echo (countSolutions($a));

// This code is contributed by ajit
?>
JavaScript
<script>

// Javascript program to find the number
// of values of b such that a = b + (a^b)
function bitCount(n)
{
    let count = 0;
    while (n != 0)
    {
        count++;
        n &= (n - 1);
    }
    return count;
}

// Function to return the number of solutions
function countSolutions(a)
{
    let count = bitCount(a);

    count = Math.pow(2, count);
    return count;
}

// Driver Code
let a = 3;

document.write(countSolutions(a));

// This code is contributed by subhammahato348

</script>

Output: 
4

 

Time Complexity: O(log N) since inbuilt pow function has been used which takes logarithmic time.
Auxiliary Space: O(1), since no extra space has been taken.


Article Tags :

Similar Reads