Open in App
Not now

Equal Sum and XOR

• Difficulty Level : Easy
• Last Updated : 04 Oct, 2021

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

Examples :

```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 Practice

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 ` `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.`

Python3

 `# Python3 program to print count` `# of values such that n+i = n^i`   `# function to count number` `# of values less than` `# equal to n that satisfy ` `# the given condition` `def` `countValues (n):` `    ``countV ``=` `0``;`   `    ``# Traverse all numbers` `    ``# from 0 to n and` `    ``# increment result only` `    ``# when given condition` `    ``# is satisfied.` `    ``for` `i ``in` `range``(n ``+` `1``):` `        ``if` `((n ``+` `i) ``=``=` `(n ^ i)):` `            ``countV ``+``=` `1``;`   `    ``return` `countV;`   `# Driver Code` `n ``=` `12``;` `print``(countValues(n));`   `# This code is contributed by mits`

C#

 `/* C# program to print count of values` `such that n+i = n^i */` `using` `System;`   `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() ` `    ``{` `        ``int` `n = 12;` `        ``Console.WriteLine(countValues(n));` `        `  `    ``}` `}`   `// This code is contributed by anuj_67.`

PHP

 ``

Javascript

 ``

Output:

`4`

Time Complexity: O(n)

Space Complexity: O(1)

Method 2 (Efficient) :
An efficient solution is as follows

we know that (n+i)=(n^i)+2*(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 ` `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.`

C#

 `/* C# program to print count of values` `  ``such that n+i = n^i */` `using` `System;` `public` `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;` `        ``Console.WriteLine(countValues(n));` `          `  `    ``}` `}`   `// This code is contributed by umadevi9616`

Python3

 `# Python3 program to print count of values such ` `# that n+i = n^i `   `# function to count number of values less than ` `# equal to n that satisfy the given condition ` `def` `countValues(n):` `    `  `    ``# unset_bits keeps track of count of un-set ` `    ``# bits in binary representation of n` `    ``unset_bits ``=` `0` `    `  `    ``while``(n):` `        ``if` `n & ``1` `=``=` `0``:` `            ``unset_bits ``+``=` `1` `        ``n ``=` `n >> ``1` `        `  `    ``# Return 2 ^ unset_bits     ` `    ``return` `1` `<< unset_bits`   `# Driver code ` `if` `__name__``=``=``'__main__'``:` `    ``n ``=` `12` `    ``print``(countValues(n))`   `# This code is contributed by rutvik`

PHP

 `> 1;` `    ``}`   `    ``// Return 2 ^ unset_bits` `    ``return` `1 << ``\$unset_bits``;` `}`   `// Driver code`   `    ``\$n` `= 12;` `    ``echo` `countValues(``\$n``);`   `// This code is contributed` `// by Anuj_67.` `?>`

Javascript

 ``

Output :

`4`

Time Complexity: O(log(n))

Space Complexity: O(1)

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

My Personal Notes arrow_drop_up
Related Articles