Related Articles

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.

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP code to find numbers with
// odd number of set bits
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP code to find numbers with
// odd number of set bits
  
// function that returns the number
// of integers with odd number of
// set bits
function 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 = ($n);
  
    $ans = $n / 2;
    if ($count % 2 != 0)
        $ans++;
    return $ans;
}
  
// Driver code
$n = 10;
echo countWithOddSetBits($n);
  
// This code is contributed by aj_36
?>

chevron_right


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 :