Related Articles
Number of integers with odd number of set bits
• Difficulty Level : Easy
• Last Updated : 07 Jan, 2019

Given a number n, count number of integers smaller than or equal to n that have odd number of set bits.

Examples:

```Input : 5
Output : 3
Explanation :
Integers with odd number of
set bits in range 1 to 5 :
0 contains 0 set bits
1 contains 1 set bits
2 contains 1 set bits
3 contains 2 set bits
4 contains 1 set bits
5 contains 2 set bits

Input : 10
Output : 5
Explanation :
Integers with odd set bits are 1, 2,
4, 7 and 8.
```

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

Prerequisites : Count number of set bits

The idea is based on below fact.

If n is odd then there are total n+1 integers smaller than or equal to n (0, 1, 2 … n) and half of these integers contain odd number of set bits.

How to handle case when n is even? We know result for n-1. We count set bits in n and add 1 to n/2 if the count is odd. Else we return n/2.

## C++

 `// CPP code to find numbers with ` `// odd number of set bits ` `#include ` `using` `namespace` `std; ` ` `  `// function that returns the number ` `// of integers with odd number of ` `// set bits ` `int` `countWithOddSetBits(``int` `n) ` `{ ` `    ``// If n is odd, then half of the ` `    ``// integers in (0, 1, .. n) contain ` `    ``// odd number of set bits. ` `    ``if` `(n % 2 != 0) ` `        ``return` `(n + 1) / 2; ` ` `  `    ``// If n is even, we know result for ` `    ``// n-1. We explicitly compute set bit ` `    ``// count in n. ` `    ``int` `count = __builtin_popcount(n); ` ` `  `    ``int` `ans = n / 2; ` `    ``if` `(count % 2 != 0) ` `        ``ans++; ` `    ``return` `ans; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `n = 10; ` `    ``cout << countWithOddSetBits(n); ` `    ``return` `0; ` `} `

## Java

 `// Java code to find numbers  ` `// with odd number of set bits ` `import` `java.io.*; ` ` `  `class` `GFG  ` `{ ` `     `  `// function that returns the ` `// number of integers with  ` `// odd number of set bits ` `static` `int` `countWithOddSetBits(``int` `n) ` `{ ` `    ``// If n is odd, then half  ` `    ``// of the integers in  ` `    ``// (0, 1, .. n) contain ` `    ``// odd number of set bits. ` `    ``if` `(n % ``2` `!= ``0``) ` `        ``return` `(n + ``1``) / ``2``; ` ` `  `    ``// If n is even, we know  ` `    ``// result for n-1. We  ` `    ``// explicitly compute set ` `    ``// bit count in n. ` `    ``int` `count = (n); ` ` `  `    ``int` `ans = n / ``2``; ` `    ``if` `(count % ``2` `!= ``0``) ` `        ``ans++; ` `    ``return` `ans; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main (String[] args)  ` `{ ` `    ``int` `n = ``10``; ` `    ``System.out.println( countWithOddSetBits(n)); ` `} ` `} ` ` `  `// This code is contributed by aj_36 `

## Python3

 `# Python 3 code to find numbers with ` `# odd number of set bits ` ` `  `# function that returns the number ` `# of integers with odd number of ` `# set bits ` `def` `countWithOddSetBits(n): ` `     `  `    ``# If n is odd, then half of the ` `    ``# integers in (0, 1, .. n) contain ` `    ``# odd number of set bits. ` `    ``if` `(n ``%` `2` `!``=` `0``): ` `        ``return` `(n ``+` `1``) ``/` `2` ` `  `    ``# If n is even, we know result for ` `    ``# n-1. We explicitly compute set  ` `    ``# bit count in n. ` `    ``count ``=` `bin``(n).count(``'1'``) ` ` `  `    ``ans ``=` `n ``/` `2` `    ``if` `(count ``%` `2` `!``=` `0``): ` `        ``ans ``+``=` `1` `    ``return` `ans ` ` `  `# Driver code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``n ``=` `10` `    ``print``(``int``(countWithOddSetBits(n))) ` ` `  `# This code is contributed by ` `# Surendra_Gangwar `

## C#

 `// C# code to find numbers  ` `// with odd number of set bits ` `using` `System; ` ` `  `class` `GFG ` `{ ` `     `  `// function that returns the ` `// number of integers with  ` `// odd number of set bits ` `static` `int` `countWithOddSetBits(``int` `n) ` `{ ` `    ``// If n is odd, then half  ` `    ``// of the integers in  ` `    ``// (0, 1, .. n) contain ` `    ``// odd number of set bits. ` `    ``if` `(n % 2 != 0) ` `        ``return` `(n + 1) / 2; ` ` `  `    ``// If n is even, we know  ` `    ``// result for n-1. We  ` `    ``// explicitly compute set ` `    ``// bit count in n. ` `    ``int` `count = (n); ` ` `  `    ``int` `ans = n / 2; ` `    ``if` `(count % 2 != 0) ` `        ``ans++; ` `    ``return` `ans; ` `} ` ` `  `// Driver Code ` `static` `public` `void` `Main () ` `{ ` `    ``int` `n = 10; ` `    ``Console.WriteLine(countWithOddSetBits(n)); ` `} ` `} ` ` `  `// This code is contributed by ajit `

## PHP

 ` `

Output :

```5
```

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
Recommended Articles
Page :