Number with set bits only between L-th and R-th index

Given L and R. The task is to find the number in whose binary representation all bits between the L-th and R-th index are set and the rest of the bits are unset. The binary representation is of 32 bits.

Examples:

Input: L = 2, R = 5
Output: 60
Explanation: The binary representation is
0..0111100 => 60



Input: L = 1, R = 3
Output: 14
Explanation: The binary representation is
0..01110 => 14

Naive Approach: The naive approach to find the number is to iterate from i = L to i = R and calculate the addition of all the powers of 2i.

Below program illustrate the naive approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to print the integer
// with all the bits set in range L-R
// Naive Approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to return the integer
// with all the bits set in range L-R
int getInteger(int L, int R)
{
  
    int number = 0;
  
    // iterate from L to R
    // and add all powers of 2
    for (int i = L; i <= R; i++)
        number += pow(2, i);
  
    return number;
}
  
// Driver Code
int main()
{
    int L = 2, R = 5;
    cout << getInteger(L, R);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to print the 
// integer with all the bits 
// set in range L-R Naive Approach
import java.io.*;
  
class GFG 
{
  
// Function to return the 
// integer with all the 
// bits set in range L-R
static int getInteger(int L, 
                      int R)
{
    int number = 0;
  
    // iterate from L to R
    // and add all powers of 2
    for (int i = L; i <= R; i++)
        number += Math.pow(2, i);
  
    return number;
}
  
// Driver Code
public static void main (String[] args) 
{
    int L = 2, R = 5;
    System.out.println(getInteger(L, R));
}
}
  
// This code is contributed by anuj_67..

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 program to print the integer
# with all the bits set in range L-R
# Naive Approach
from math import pow
  
# Function to return the integer
# with all the bits set in range L-R
def getInteger(L, R):
    number = 0
  
    # iterate from L to R
    # and add all powers of 2
    for i in range(L, R + 1, 1):
        number += pow(2, i)
  
    return number
  
# Driver Code
if __name__ == '__main__':
    L = 2
    R = 5
    print(int(getInteger(L, R)))
  
# This code is contributed by
# Surendra_Gangwar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to print the 
// integer with all the bits 
// set in range L-R Naive Approach
using System;
  
class GFG
{
// Function to return the 
// integer with all the 
// bits set in range L-R
static int getInteger(int L, 
                      int R)
{
    int number = 0;
  
    // iterate from L to R
    // and add all powers of 2
    for (int i = L; i <= R; i++)
        number += (int)Math.Pow(2, i);
  
    return number;
}
  
// Driver Code
public static void Main () 
{
    int L = 2, R = 5;
    Console.Write(getInteger(L, R));
}
}
  
// This code is contributed
// by shiv_bhakt.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to print 
// the integer with all 
// the bits set in range 
// L-R Naive Approach
  
// Function to return the 
// integer with all the 
// bits set in range L-R
function getInteger($L, $R)
{
    $number = 0;
  
    // iterate from L to R
    // and add all powers of 2
    for ($i = $L; $i <= $R; $i++)
        $number += pow(2, $i);
  
    return $number;
}
  
// Driver Code
$L = 2;
$R = 5;
echo getInteger($L, $R);
  
// This code is contributed
// by shiv_bhakt.
?>

chevron_right


Output:

60

An efficient approach is to compute the number with all (R) set bits from right and subtract the number with all (L-1) bits set from right to get the required number.

  1. Compute the number which has all R set bits from the right using the below formula.
    (1 << (R+1)) - 1.
  2. Subtract the number which has all (L-1) set bits from the right.
    (1<<L) - 1 

Hence computing ((1<<(R+1))-1)-((1<<L)-1), we get the final formula as:

(1<<(R+1))-(1<<L)

Below program illustrate the efficient approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to print the integer
// with all the bits set in range L-R
// Efficient Approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to return the integer
// with all the bits set in range L-R
int setbitsfromLtoR(int L, int R)
{
    return (1 << (R + 1)) - (1 << L);
}
  
// Driver Code
int main()
{
    int L = 2, R = 5;
    cout << setbitsfromLtoR(L, R);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to print 
// the integer with all 
// the bits set in range
// L-R Efficient Approach
import java.io.*;
  
class GFG 
{
      
// Function to return the 
// integer with all the 
// bits set in range L-R
static int setbitsfromLtoR(int L, 
                           int R)
{
    return (1 << (R + 1)) - 
           (1 << L);
}
  
// Driver Code
public static void main (String[] args)
{
    int L = 2, R = 5;
    System.out.println(setbitsfromLtoR(L, R));
}
}
  
// This code is contributed
// by shiv_bhakt.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to print 
# the integer with all the 
# bits set in range L-R
# Efficient Approach
  
# Function to return the
# integer with all the
# bits set in range L-R
def setbitsfromLtoR(L, R):
  
    return ((1 << (R + 1)) - 
            (1 << L))
  
# Driver Code
L = 2
R = 5
print(setbitsfromLtoR(L, R))
  
# This code is contributed
# by Smita

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to print 
// the integer with all 
// the bits set in range
// L-R Efficient Approach
using System;
  
class GFG
{
// Function to return the 
// integer with all the 
// bits set in range L-R
static int setbitsfromLtoR(int L, 
                           int R)
{
    return (1 << (R + 1)) - 
           (1 << L);
}
  
// Driver Code
public static void Main ()
{
    int L = 2, R = 5;
    Console.WriteLine(setbitsfromLtoR(L, R));
}
}
  
// This code is contributed
// by shiv_bhakt.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to print 
// the integer with all 
// the bits set in range 
// L-R Efficient Approach
  
// Function to return the 
// integer with all the
// bits set in range L-R
function setbitsfromLtoR($L, $R)
{
    return (1 << ($R + 1)) -    
           (1 << $L);
}
  
// Driver Code
$L = 2;
$R = 5;
echo setbitsfromLtoR($L, $R);
  
// This code is contributed 
// by shiv_bhakt.
?>

chevron_right


Output:

60

Time Complexity: O(1)
Auxiliary Space: O(1)



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.