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 => 60Input: 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> |
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> |
60
Time Complexity: O(1)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!