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++
/* 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 ?> |
Javascript
<script> /* JavaScript 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) { let countV = 0; // Traverse all numbers from 0 to n and // increment result only when given condition // is satisfied. for (let i=0; i<=n; i++ ) if ((n+i) == (n^i) ) countV++; return countV; } // Driver program let n = 12; document.write(countValues(n)); // This code is contributed by Surbhi Tyagi. </script> |
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
<?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. ?> |
Javascript
<script> // Javascript 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 let 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 let n = 12; document.write(countValues(n)); // This code is contributed by susmitakundugoaldanga </script> |
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.
Please Login to comment...