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

Input :n = 7Output: 1Explanation:7^i = 7+i holds only for only for i = 0 7+0 = 7^0 = 7Input:n = 12Output: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

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

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

`<?php` `// PHP 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` `function` `countValues (` `$n` `)` `{` ` ` `$countV` `= 0;` ` ` `// Traverse all numbers` ` ` `// from 0 to n and` ` ` `// increment result only` ` ` `// when given condition` ` ` `// is satisfied.` ` ` `for` `(` `$i` `= 0; ` `$i` `<= ` `$n` `; ` `$i` `++ )` ` ` `if` `((` `$n` `+ ` `$i` `) == (` `$n` `^` `$i` `) )` ` ` `$countV` `++;` ` ` `return` `$countV` `;` `}` ` ` `// Driver Code` ` ` `$n` `= 12;` ` ` `echo` `countValues(` `$n` `);` `// This code is contributed by m_kit` `?>` |

**Output:**

4

**Method 2 (Efficient) : **

An efficient solution is as follows

we know that (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.` |

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

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
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 Code
public static void Main()
{
int n = 12;
Console.Write(countValues(n));
}
}
// This code is contributed by Anuj_67.
```

## PHP

`<?php` `/* PHP 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` `function` `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` `++;` ` ` `$n` `= ` `$n` `>> 1;` ` ` `}` ` ` `// Return 2 ^ unset_bits` ` ` `return` `1 << ` `$unset_bits` `;` `}` `// Driver code` ` ` `$n` `= 12;` ` ` `echo` `countValues(` `$n` `);` `// This code is contributed` `// by Anuj_67.` `?>` |

**Output :**

4

https://youtu.be/zhu605v9KOI

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.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.