# Count smaller values whose XOR with x is greater than x

Given a integer ‘x’, find the number of values of ‘a’ satisfying the following conditions:

1. a XOR x > x
2. 0 < a < x

Examples :

```Input : x = 10
Output : 5
Explanation: For x = 10, following 5 values
of 'a' satisfy the conditions:
1 XOR 10 = 11
4 XOR 10 = 14
5 XOR 10 = 15
6 XOR 10 = 12
7 XOR 10 = 13

Input : x = 2
Output : 1
Explanation: For x=2, we have just one value
1 XOR 2 = 3.
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Naive Approach
A Simple approach is to check for all values of ‘a’ between 0 and ‘x’ and calculate its XOR with x
and check if the condition 1 satisfies.

## C++

 `// C++ program to find count of values ` `// whose XOR with x is greater than x ` `// and values are smaller than x ` `#include ` `using` `namespace` `std; ` ` `  `int` `countValues(``int` `x) ` `{ ` `    ``int` `count = 0; ` `    ``for` `(``int` `i=1; i < x; i++) ` `        ``if` `((i ^ x) > x) ` `            ``count++; ` `    ``return` `count; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `x = 10; ` `    ``cout << countValues(x); ` `    ``return` `0; ` `} `

## Java

 `// Java program to find count of values ` `// whose XOR with x is greater than x ` `// and values are smaller than x ` ` `  `public` `class` `XOR ` `{ ` `    ``static` `int` `countValues(``int` `x) ` `    ``{ ` `        ``int` `count = ``0``; ` `        ``for` `(``int` `i=``1``; i < x; i++) ` `            ``if` `((i ^ x) > x) ` `                ``count++; ` `        ``return` `count; ` `    ``} ` `     `  `    ``public` `static` `void` `main (String[] args) ` `    ``{ ` `        ``int` `x = ``10``; ` `        ``System.out.println(countValues(x)); ` `    ``} ` `} ` ` `  `// This code is contributed by Saket Kumar `

## Python 3

 `# Python3 program to find  ` `# count of values whose ` `# XOR with x is greater ` `# than x and values are  ` `# smaller than x ` ` `  `def` `countValues(x): ` ` `  `    ``count ``=` `0` `    ``for` `i ``in` `range``(``1` `,x): ` `        ``if` `((i ^ x) > x): ` `            ``count ``+``=` `1` `    ``return` `count ` ` `  `# Driver code ` `x ``=` `10` `print``(countValues(x)) ` ` `  `# This code is contributed  ` `# by Smitha `

## C#

 `  `  `// C# program to find count of values ` `// whose XOR with x is greater than x ` `// and values are smaller than x ` `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``static` `int` `countValues(``int` `x) ` `    ``{ ` `        ``int` `count = 0; ` `        ``for` `(``int` `i = 1; i < x; i++) ` `            ``if` `((i ^ x) > x) ` `                ``count++; ` `        ``return` `count; ` `    ``} ` `     `  `    ``public` `static` `void` `Main () ` `    ``{ ` `        ``int` `x = 10; ` `        ``Console.Write(countValues(x)); ` `    ``} ` `} ` ` `  `// This code is contributed by nitin mittal. `

## PHP

 ` ``\$x``) ` `            ``\$count``++; ` `    ``return` `\$count``; ` `} ` ` `  `    ``// Driver code ` `    ``\$x` `= 10; ` `    ``echo` `countValues(``\$x``); ` ` `  `// This code is contributed by anuj_67. ` `?> `

Output :

`5`

The time complexity of the above approach is O(x).

Efficient Approach
The efficient solution lies in the binary representation of the number. We consider all 0’s in binary representation. For every 0 at the i-th position, we can have 2i numbers smaller than or equal to x with greater XOR.

## C++

 `// C++ program to find count of values ` `// whose XOR with x is greater than x ` `// and values are smaller than x ` `#include ` `using` `namespace` `std; ` ` `  `int` `countValues(``int` `x) ` `{ ` `    ``// Initialize result ` `    ``int` `count = 0, n = 1; ` ` `  `    ``// Traversing through all bits of x ` `    ``while` `(x != 0) ` `    ``{ ` `        ``// If current last bit of x is set ` `        ``// then increment count by n. Here ` `        ``// n is a power of 2 corresponding ` `        ``// to position of bit ` `        ``if` `(x%2 == 0) ` `            ``count += n; ` ` `  `        ``// Simultaneously calculate the 2^n ` `        ``n *= 2; ` ` `  `        ``// Replace x with x/2; ` `        ``x /= 2; ` `    ``} ` ` `  `    ``return` `count; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `x = 10; ` `    ``cout << countValues(x); ` `    ``return` `0; ` `} `

## Java

 `// Java program to find count of values ` `// whose XOR with x is greater than x ` `// and values are smaller than x ` ` `  `class` `GFG ` `{ ` `    ``static` `int` `countValues(``int` `x) ` `    ``{ ` `        ``// Initialize result ` `        ``int` `count = ``0``, n = ``1``; ` `         `  `        ``// Traversing through all bits of x ` `        ``while` `(x != ``0``) ` `        ``{ ` `            ``// If current last bit of x is set ` `            ``// then increment count by n. Here ` `            ``// n is a power of 2 corresponding ` `            ``// to position of bit ` `            ``if` `(x % ``2` `== ``0``) ` `                ``count += n; ` `                 `  `            ``// Simultaneously calculate the 2^n ` `            ``n *= ``2``; ` `             `  `            ``// Replace x with x/2; ` `            ``x /= ``2``; ` `        ``} ` `        ``return` `count; ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `main (String[] args) ` `    ``{ ` `        ``int` `x = ``10``; ` `        ``System.out.println(countValues(x)); ` `    ``} ` `     `  `} ` ` `  `// This code is contributed by Saket Kumar `

## Python3

 `# Python3 program to find count ` `# of values whose XOR with ` `# x is greater than x and  ` `# values are smaller than x ` ` `  `def` `countValues(x): ` `     `  `    ``# Initialize result ` `    ``count ``=` `0``; ` `    ``n ``=` `1``; ` ` `  `    ``# Traversing through  ` `    ``# all bits of x ` `    ``while` `(x > ``0``): ` `         `  `        ``# If current last bit  ` `        ``# of x is set then ` `        ``# increment count by  ` `        ``# n. Here n is a power ` `        ``# of 2 corresponding ` `        ``# to position of bit ` `        ``if` `(x ``%` `2` `=``=` `0``): ` `            ``count ``+``=` `n; ` ` `  `        ``# Simultaneously  ` `        ``# calculate the 2^n ` `        ``n ``*``=` `2``; ` ` `  `        ``# Replace x with x/2; ` `        ``x ``/``=` `2``; ` `        ``x ``=` `int``(x); ` ` `  `    ``return` `count; ` ` `  `# Driver code ` `x ``=` `10``; ` `print``(countValues(x)); ` ` `  `# This code is contributed ` `# by mits `

## C#

 `  `  `// C# program to find count of values ` `// whose XOR with x is greater than x ` `// and values are smaller than x ` `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``static` `int` `countValues(``int` `x) ` `    ``{ ` `        ``// Initialize result ` `        ``int` `count = 0, n = 1; ` `         `  `        ``// Traversing through all bits of x ` `        ``while` `(x != 0) ` `        ``{ ` `            ``// If current last bit of x is set ` `            ``// then increment count by n. Here ` `            ``// n is a power of 2 corresponding ` `            ``// to position of bit ` `            ``if` `(x % 2 == 0) ` `                ``count += n; ` `                 `  `            ``// Simultaneously calculate the 2^n ` `            ``n *= 2; ` `             `  `            ``// Replace x with x/2; ` `            ``x /= 2; ` `        ``} ` `        ``return` `count; ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `Main () ` `    ``{ ` `        ``int` `x = 10; ` `        ``Console.Write(countValues(x)); ` `    ``} ` `     `  `} ` ` `  `// This code is contributed by nitin mittal `

## PHP

 ` `

Output :

```5
```

Time complexity of this solution is O(Log x)

This article is contributed by DANISH KALEEM. 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

Article Tags :
Practice Tags :

Be the First to upvote.

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