Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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 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 finding the number is to iterate from i = L to i = R and calculate the addition of all the powers of 2i
The program below illustrates the naive approach:  

C++




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


Java




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


Python3




# 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


C#




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


PHP




<?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.
?>


Javascript




<script>
 
// Javascript 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)
{
 
    var number = 0;
 
    // iterate from L to R
    // and add all powers of 2
    for (var i = L; i <= R; i++)
        number += Math.pow(2, i);
 
    return number;
}
 
// Driver Code
var L = 2, R = 5;
document.write( getInteger(L, R));
 
</script>


Output

60

Time Complexity: O(R2), considering the time complexity of the pow() method.
Auxiliary Space: O(1)

An efficient approach is to compute the number with all (R) bits set from the right and subtract the number with all (L-1) bits set from the 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)  

The program below illustrates the efficient approach:  

C++




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


Java




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


Python3




# 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


C#




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


PHP




<?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.
?>


Javascript




<script>
 
// Javascript 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
var L = 2, R = 5;
document.write( setbitsfromLtoR(L, R));
 
// This code is contributed by famously.
</script>


Output

60

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



Last Updated : 13 Dec, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads