# Equal Sum and XOR

Given a positive integer n, find count of positive integers i such that 0 <= i <= n and n+i = n^i

```Input  : n = 7
Output : 1
Explanation:
7^i = 7+i holds only for only for i = 0
7+0 = 7^0 = 7

Input n = 12
Output: 4
12^i = 12+i hold only for i = 0, 1, 2, 3
for i=0, 12+0 = 12^0 = 12
for i=1, 12+1 = 12^1 = 13
for i=2, 12+2 = 12^2 = 14
for i=3, 12+3 = 12^3 = 15
```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

Method 1 (Simple) :

One simple solution is to iterate over all values of i 0<= i <= n and count all satisfying values.

## C++

```/* C++ program to print count of values such
that n+i = n^i */
#include <iostream>
using namespace std;

// function to count number of values less than
// equal to n that satisfy the given condition
int countValues (int n)
{
int countV = 0;

// Traverse all numbers from 0 to n and
// increment result only when given condition
// is satisfied.
for (int i=0; i<=n; i++ )
if ((n+i) == (n^i) )
countV++;

return countV;
}

// Driver program
int main()
{
int n = 12;
cout << countValues(n);
return 0;
}
```

## Java

```/* Java program to print count of values
such that n+i = n^i */
import java.util.*;

class GFG {

// function to count number of values
// less than equal to n that satisfy
// the given condition
public static int countValues (int n)
{
int countV = 0;

// Traverse all numbers from 0 to n
// and increment result only when
// given condition is satisfied.
for (int i = 0; i <= n; i++ )
if ((n + i) == (n ^ i) )
countV++;

return countV;
}

/* Driver program to test above function */
public static void main(String[] args)
{
int n = 12;
System.out.println(countValues(n));

}
}

// This code is contributed by Arnav Kr. Mandal.
```

Output:

`4`

Method 2 (Efficient) :

An efficient solution is as follows

Since we know a + b = a ^ b + a & b

We can write, n + i = n ^ i + n & i

So n + i = n ^ i implies n & i = 0

Hence our problem reduces to finding values of i such that n & i = 0. How to find count of such pairs? We can use the count of unset-bits in the binary representation of n. For n & i to be zero, i must unset all set-bits of n. If the kth bit is set at a particular in n, kth bit in i must be 0 always, else kth bit of i can be 0 or 1

Hence, total such combinations are 2^(count of unset bits in n)

For example, consider n = 12 (Binary representation : 1 1 0 0).
All possible values of i that can unset all bits of n are 0 0 0/1 0/1 where 0/1 implies either 0 or 1. Number of such values of i are 2^2 = 4.

The following is the program following the above idea.

## C++

```/* c++ program to print count of values such
that n+i = n^i */
#include <bits/stdc++.h>
using namespace std;

// function to count number of values less than
// equal to n that satisfy the given condition
int countValues(int n)
{
// unset_bits keeps track of count of un-set
// bits in binary representation of n
int unset_bits=0;
while (n)
{
if ((n & 1) == 0)
unset_bits++;
n=n>>1;
}

// Return 2 ^ unset_bits
return 1 << unset_bits;
}

// Driver code
int main()
{
int n = 12;
cout << countValues(n);
return 0;
}
```

## Java

```/* Java program to print count of values
such that n+i = n^i */
import java.util.*;

class GFG {

// function to count number of values
// less than equal to n that satisfy
// the given condition
public static int countValues(int n)
{
// unset_bits keeps track of count
// of un-set bits in binary
// representation of n
int unset_bits=0;
while (n > 0)
{
if ((n & 1) == 0)
unset_bits++;
n=n>>1;
}

// Return 2 ^ unset_bits
return 1 << unset_bits;
}

/* Driver program to test above
function */
public static void main(String[] args)
{
int n = 12;
System.out.println(countValues(n));

}
}

// This code is contributed by Arnav Kr. Mandal.
```

Output:

```4
```

This article is contributed by Nikhil Chakravartula. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
2.3 Average Difficulty : 2.3/5.0
Based on 17 vote(s)

Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.