Given a positive integer **N**, the task is to count the total number of set bits in binary representation of all the numbers from **1** to **N**.

**Examples:**

Input:N = 3

Output:4

setBits(1) + setBits(2) + setBits(3) = 1 + 1 + 2 = 4

Input:N = 6

Output:9

**Approach:** Solution to this problem has been published in the Set 1 and the Set 2 of this article. Here, a dynamic programming based approach is discussed.

**Base case:**Number of set bits in 0 and 1 are 0 and 1 respectively.- Now for every element
**i**from the range**[2, N]**, if**i is even**then it will have the same number of set bits as**i / 2**because to get the number**i**we just shift the number**i / 2**by one. While shifting, the number of set bits does not change. - Similarly, if
**i is odd**then it will have**1**additional set bit at**0**position than^{th}**i – 1**which was even.

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to return the count of ` `// set bits in all the integers ` `// from the range [1, n] ` `int` `countSetBits(` `int` `n) ` `{ ` ` ` ` ` `// To store the required count ` ` ` `// of the set bits ` ` ` `int` `cnt = 0; ` ` ` ` ` `// To store the count of set ` ` ` `// bits in every integer ` ` ` `vector<` `int` `> setBits(n + 1); ` ` ` ` ` `// 0 has no set bit ` ` ` `setBits[0] = 0; ` ` ` ` ` `// 1 has a single set bit ` ` ` `setBits[1] = 1; ` ` ` ` ` `// For the rest of the elements ` ` ` `for` `(` `int` `i = 2; i <= n; i++) { ` ` ` ` ` `// If current element i is even then ` ` ` `// it has set bits equal to the count ` ` ` `// of the set bits in i / 2 ` ` ` `if` `(i % 2 == 0) { ` ` ` `setBits[i] = setBits[i / 2]; ` ` ` `} ` ` ` ` ` `// Else it has set bits equal to one ` ` ` `// more than the previous element ` ` ` `else` `{ ` ` ` `setBits[i] = setBits[i - 1] + 1; ` ` ` `} ` ` ` `} ` ` ` ` ` `// Sum all the set bits ` ` ` `for` `(` `int` `i = 0; i <= n; i++) { ` ` ` `cnt = cnt + setBits[i]; ` ` ` `} ` ` ` ` ` `return` `cnt; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `n = 6; ` ` ` ` ` `cout << countSetBits(n); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java implementation of the approach ` `import` `java.util.*; ` ` ` `class` `GFG ` `{ ` ` ` `// Function to return the count of ` `// set bits in all the integers ` `// from the range [1, n] ` `static` `int` `countSetBits(` `int` `n) ` `{ ` ` ` ` ` `// To store the required count ` ` ` `// of the set bits ` ` ` `int` `cnt = ` `0` `; ` ` ` ` ` `// To store the count of set ` ` ` `// bits in every integer ` ` ` `int` `[]setBits = ` `new` `int` `[n + ` `1` `]; ` ` ` ` ` `// 0 has no set bit ` ` ` `setBits[` `0` `] = ` `0` `; ` ` ` ` ` `// 1 has a single set bit ` ` ` `setBits[` `1` `] = ` `1` `; ` ` ` ` ` `// For the rest of the elements ` ` ` `for` `(` `int` `i = ` `2` `; i <= n; i++) ` ` ` `{ ` ` ` ` ` `// If current element i is even then ` ` ` `// it has set bits equal to the count ` ` ` `// of the set bits in i / 2 ` ` ` `if` `(i % ` `2` `== ` `0` `) ` ` ` `{ ` ` ` `setBits[i] = setBits[i / ` `2` `]; ` ` ` `} ` ` ` ` ` `// Else it has set bits equal to one ` ` ` `// more than the previous element ` ` ` `else` ` ` `{ ` ` ` `setBits[i] = setBits[i - ` `1` `] + ` `1` `; ` ` ` `} ` ` ` `} ` ` ` ` ` `// Sum all the set bits ` ` ` `for` `(` `int` `i = ` `0` `; i <= n; i++) ` ` ` `{ ` ` ` `cnt = cnt + setBits[i]; ` ` ` `} ` ` ` `return` `cnt; ` `} ` ` ` `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` ` ` `int` `n = ` `6` `; ` ` ` ` ` `System.out.println(countSetBits(n)); ` `} ` `} ` ` ` `// This code is contributed by Princi Singh ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 implementation of the approach ` ` ` `# Function to return the count of ` `# set bits in all the integers ` `# from the range [1, n] ` `def` `countSetBits(n): ` ` ` ` ` `# To store the required count ` ` ` `# of the set bits ` ` ` `cnt ` `=` `0` ` ` ` ` `# To store the count of set ` ` ` `# bits in every integer ` ` ` `setBits ` `=` `[` `0` `for` `x ` `in` `range` `(n ` `+` `1` `)] ` ` ` ` ` `# 0 has no set bit ` ` ` `setBits[` `0` `] ` `=` `0` ` ` ` ` `# 1 has a single set bit ` ` ` `setBits[` `1` `] ` `=` `1` ` ` ` ` `# For the rest of the elements ` ` ` `for` `i ` `in` `range` `(` `2` `, n ` `+` `1` `): ` ` ` ` ` `# If current element i is even then ` ` ` `# it has set bits equal to the count ` ` ` `# of the set bits in i / 2 ` ` ` `if` `(i ` `%` `2` `=` `=` `0` `): ` ` ` `setBits[i] ` `=` `setBits[i ` `/` `/` `2` `] ` ` ` ` ` `# Else it has set bits equal to one ` ` ` `# more than the previous element ` ` ` `else` `: ` ` ` `setBits[i] ` `=` `setBits[i ` `-` `1` `] ` `+` `1` ` ` ` ` `# Sum all the set bits ` ` ` `for` `i ` `in` `range` `(` `0` `, n ` `+` `1` `): ` ` ` `cnt ` `=` `cnt ` `+` `setBits[i] ` ` ` ` ` `return` `cnt ` ` ` `# Driver code ` `n ` `=` `6` `print` `(countSetBits(n)) ` ` ` `# This code is contributed by Sanjit Prasad ` |

*chevron_right*

*filter_none*

## C#

`// C# implementation of the approach ` `using` `System; ` ` ` `class` `GFG ` `{ ` ` ` ` ` `// Function to return the count of ` ` ` `// set bits in all the integers ` ` ` `// from the range [1, n] ` ` ` `static` `int` `countSetBits(` `int` `n) ` ` ` `{ ` ` ` ` ` `// To store the required count ` ` ` `// of the set bits ` ` ` `int` `cnt = 0; ` ` ` ` ` `// To store the count of set ` ` ` `// bits in every integer ` ` ` `int` `[]setBits = ` `new` `int` `[n + 1]; ` ` ` ` ` `// 0 has no set bit ` ` ` `setBits[0] = 0; ` ` ` ` ` `// 1 has a single set bit ` ` ` `setBits[1] = 1; ` ` ` ` ` `// For the rest of the elements ` ` ` `for` `(` `int` `i = 2; i <= n; i++) ` ` ` `{ ` ` ` ` ` `// If current element i is even then ` ` ` `// it has set bits equal to the count ` ` ` `// of the set bits in i / 2 ` ` ` `if` `(i % 2 == 0) ` ` ` `{ ` ` ` `setBits[i] = setBits[i / 2]; ` ` ` `} ` ` ` ` ` `// Else it has set bits equal to one ` ` ` `// more than the previous element ` ` ` `else` ` ` `{ ` ` ` `setBits[i] = setBits[i - 1] + 1; ` ` ` `} ` ` ` `} ` ` ` ` ` `// Sum all the set bits ` ` ` `for` `(` `int` `i = 0; i <= n; i++) ` ` ` `{ ` ` ` `cnt = cnt + setBits[i]; ` ` ` `} ` ` ` `return` `cnt; ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `static` `public` `void` `Main () ` ` ` `{ ` ` ` `int` `n = 6; ` ` ` ` ` `Console.WriteLine(countSetBits(n)); ` ` ` `} ` `} ` ` ` `// This code is contributed by AnkitRai01 ` |

*chevron_right*

*filter_none*

**Output:**

9

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.