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

Method 1 (Simple) :
One simple solution is to iterate over all values of i 0<= i <= n and count all satisfying values.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

/* 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right



Output:

4

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

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

filter_none

edit
close

play_arrow

link
brightness_4
code

/* 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right



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.

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.




My Personal Notes arrow_drop_up

Improved By : jit_t, vt_m, Mithun Kumar, rutvik_56

Article Tags :
Practice Tags :


17


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.