Related Articles
Sum of bit differences for numbers from 0 to N | Set 2
• Difficulty Level : Medium
• Last Updated : 07 Aug, 2020

Given a number N, the task is to calculate the total number of corresponding different bit in the binary representation for every consecutive number from 0 to N.

Examples:

Input: N = 5
Output: 8
Explanation:
Binary Representation of numbers are:
0 -> 000,
1 -> 001,
2 -> 010,
3 -> 011,
4 -> 100,
5 -> 101
Between 1 and 0 -> 1 bit is different
Between 2 and 1 -> 2 bits are different
Between 3 and 2 -> 1 bit is different
Between 4 and 3 -> 3 bits are different
Between 5 and 4 -> 1 bit is different
Total = 1 + 2 + 1 + 3 + 1 = 8

Input: N = 11
Output: 19

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

For Naive and Efficient Approach please refer to the previous post of this article.

More Efficient Approach: To optimize the above methods, we can use Recursion. To solve the problem, the following observations need to be made

```Number:     0 1 2 3 4  5  6  7
Difference: 1 2 1 3 1  2  1  4
Sum:        1 3 4 7 8 10 11 15
```

We can observe that for N = [1, 2, 3, 4, …..], the sum of different bits in consecutive elements forms the sequence [1, 3, 4, 7, 8, ……]. Hence, Nth term of this series will be our required answer, which can be calculated as:

a(n) = a(n / 2) + n; with base case as a(1) = 1

Below is the implementation for above Recursive approach:

## C++

 `// C++ program to find the sum``// of bit differences between``// consecutive numbers``// from 0 to N using recursion`` ` `#include ``using` `namespace` `std;`` ` `// Recursive function to find sum``// of different bits between``// consecutive numbers from 0 to N``int` `totalCountDifference(``int` `n)``{`` ` `    ``// Base case``    ``if` `(n == 1)``        ``return` `1;`` ` `    ``// Calculate the Nth term``    ``return` `n``           ``+ totalCountDifference(n / 2);``}`` ` `// Driver Code``int` `main()``{``    ``// Given Number``    ``int` `N = 5;`` ` `    ``// Function Call``    ``cout << totalCountDifference(N);``    ``return` `0;``}`

## Java

 `// Java program to find the sum``// of bit differences between``// consecutive numbers from ``// 0 to N using recursion``class` `GFG{`` ` `// Recursive function to find sum``// of different bits between``// consecutive numbers from 0 to N``static` `int` `totalCountDifference(``int` `n)``{`` ` `    ``// Base case``    ``if` `(n == ``1``)``        ``return` `1``;`` ` `    ``// Calculate the Nth term``    ``return` `n + totalCountDifference(n / ``2``);``}`` ` `// Driver Code``public` `static` `void` `main(String[] args)``{``     ` `    ``// Given number``    ``int` `N = ``5``;`` ` `    ``// Function call``    ``System.out.println(totalCountDifference(N));``}``}`` ` `// This code is contributed by himanshu77`

## Python3

 `# Python3 program to find the sum``# of bit differences between``# consecutive numbers from``# 0 to N using recursion`` ` `# Recursive function to find sum``# of different bits between``# consecutive numbers from 0 to N``def` `totalCountDifference (n):`` ` `    ``# Base case``    ``if` `(n ``=``=` `1``):``        ``return` `1`` ` `    ``# Calculate the Nth term``    ``return` `n ``+` `totalCountDifference(n ``/``/` `2``)`` ` `# Driver code`` ` `# Given number``N ``=` `5`` ` `# Function call``print``(totalCountDifference(N))`` ` `# This code is contributed by himanshu77`

## C#

 `// C# program to find the sum``// of bit differences between``// consecutive numbers from``// 0 to N using recursion``using` `System;`` ` `class` `GFG{`` ` `// Recursive function to find sum``// of different bits between``// consecutive numbers from 0 to N``static` `int` `totalCountDifference(``int` `n)``{`` ` `    ``// Base case``    ``if` `(n == 1)``        ``return` `1;`` ` `    ``// Calculate the Nth term``    ``return` `n + totalCountDifference(n / 2);``}`` ` `// Driver Code``public` `static` `void` `Main()``{``     ` `    ``// Given number``    ``int` `N = 5;`` ` `    ``// Function call``    ``Console.WriteLine(totalCountDifference(N)); ``}``}`` ` `// This code is contributed by himanshu77`
Output:
```8
```

Time Complexity: O(log2N)
Auxiliary Space: O(1) My Personal Notes arrow_drop_up