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