Equal Sum and XOR (original) (raw)

Last Updated : 4 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

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

Try It Yourselfredirect icon

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

i<=i <= i<=n; $i++ ) if (($n + i)==(i) == (i)==(n^$i) ) $countV++; return $countV; } // Driver Code $n = 12; echo countValues($n); // This code is contributed by m_kit ?>

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

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

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

JavaScript

`

Output :

4

Time Complexity: O(log(n))

Space Complexity: O(1)

https://www.youtube.com/watch?v=zhu605v9KOI&feature=youtu.be