Given a positive integer n, check whether only the first and last bits are set in the binary representation of n. Print ‘Yes’ or ‘No’.
Examples:
Input: 9
Output: Yes
(9)10 = (1001)2, only the first and
last bits are set.Input: 15
Output: No
(15)10 = (1111)2, except first and last
there are other bits also which are set.
We have already discussed a solution here.
In this post, a simpler solution is discussed.
Any number with first and last bits set are of the form (1+2^n):
2^n => 10000… (n zeroes)
+ 1 + 1
————————————-
(1 + 2^n) => 10000….1 (n-1 zeroes)
For any given number ‘N’ of the form (1 + 2^n), we have: ((N-1) & (N-2)) = 0
((1 + 2^n) – 1) => (2^n) => 10000…. (n zeroes)
& ((1 + 2^n) – 2) => &((2^n) – 1) => 01111…. (n 1’s)
————————————————————–
00000….
For example: ‘9’ is of the form (1 + 2^3)
(9)10 => (1001)2
(8)10 => (1000)2
&(7)10 =>& (0111)2
———————–
(0000)2
Hence for any given number ‘N’, if ((N-1) & (N-2)) == 0, then we can say ‘N’ has only first and last bits set.
// C++ to check whether the number has only // first and last bits set #include <bits/stdc++.h> using namespace std;
// function to check whether the number has only // first and last bits set bool onlyFirstAndLastAreSet(unsigned int n)
{ if (n == 1)
return true ;
if (n == 2)
return false ;
return (((n - 1) & (n - 2)) == 0);
} // Driver program to test above int main()
{ unsigned int n = 9;
if (onlyFirstAndLastAreSet(n))
cout << "Yes" ;
else
cout << "No" ;
return 0;
} |
// Java to check whether // the number has only // first and last bits set class GFG
{ // function to check whether // the number has only // first and last bits set static boolean onlyFirstAndLastAreSet( int n)
{ if (n == 1 )
return true ;
if (n == 2 )
return false ;
return (((n - 1 ) &
(n - 2 )) == 0 );
} // Driver Code public static void main(String[] args)
{ int n = 9 ;
if (onlyFirstAndLastAreSet(n))
System.out.println( "Yes" );
else
System.out.println( "No" );
} } // This code is contributed // by Smitha |
# Python 3 to check whether # the number has only # first and last bits set # function to check whether # the number has only # first and last bits set def onlyFirstAndLastAreSet(n):
if (n = = 1 ):
return True
if (n = = 2 ):
return False
return (((n - 1 ) &
(n - 2 )) = = 0 )
# Driver Code n = 9
if (onlyFirstAndLastAreSet(n)):
print ( "Yes" )
else :
print ( "No" )
# This code is contributed # by Smitha |
// C# to check whether // the number has only // first and last bits set using System;
class GFG
{ // function to check whether // the number has only // first and last bits set static bool onlyFirstAndLastAreSet( int n)
{ if (n == 1)
return true ;
if (n == 2)
return false ;
return (((n - 1) &
(n - 2)) == 0);
} // Driver Code public static void Main()
{ int n = 9;
if (onlyFirstAndLastAreSet(n))
Console.Write( "Yes" );
else
Console.Write( "No" );
} } // This code is contributed // by Smitha |
<?php // PHP to check whether the // number has only first and // last bits set // function to check whether // the number has only first // and last bits set function onlyFirstAndLastAreSet( $n )
{ if ( $n == 1)
return true;
if ( $n == 2)
return false;
return ((( $n - 1) &
( $n - 2)) == 0);
} // Driver Code $n = 9;
if (onlyFirstAndLastAreSet( $n ))
echo "Yes" ;
else echo "No" ;
// This code is contributed // by Smitha ?> |
<script> // javascript to check whether // the number has only // first and last bits set // function to check whether // the number has only // first and last bits set function onlyFirstAndLastAreSet(n)
{ if (n == 1)
return true ;
if (n == 2)
return false ;
return (((n - 1) &
(n - 2)) == 0);
} // Driver Code var n = 9;
if (onlyFirstAndLastAreSet(n))
document.write( "Yes" );
else document.write( "No" );
// This code contributed by shikhasingrajput </script> |
Yes
Time complexity: O(1)
Auxiliary space: O(1)