Given N, check if the number is a Fibbinary number or not. Fibbinary numbers are integers whose binary representation includes no consecutive ones.
Examples:
Input : 10 Output : YES Explanation: 1010 is the binary representation of 10 which does not contains any consecutive 1's. Input : 11 Output : NO Explanation: 1011 is the binary representation of 11, which contains consecutive 1's
The idea of doing this is to right shift the number, till n!=0. For every binary representation of 1, check if the last bit found was 1 or not. Get the last bit of binary representation of the integer by doing a(n&1). If the last bit of the binary representation is 1 and the previous bit before doing a right shift was also one, we encounter consecutive 1’s. So we come to the conclusion that it is not a fibbinary number.
Some of the first few Fibbinary numbers are:
0, 2, 4, 8, 10, 16, 18, 20.......
// CPP program to check if a number // is fibinnary number or not #include <iostream> using namespace std;
// function to check if binary // representation of an integer // has consecutive 1s bool checkFibinnary( int n)
{ // stores the previous last bit
// initially as 0
int prev_last = 0;
while (n)
{
// if current last bit and
// previous last bit is 1
if ((n & 1) && prev_last)
return false ;
// stores the last bit
prev_last = n & 1;
// right shift the number
n >>= 1;
}
return true ;
} // Driver code to check above function int main()
{ int n = 10;
if (checkFibinnary(n))
cout << "YES" ;
else
cout << "NO" ;
return 0;
} |
// Java program to check if a number // is fibinnary number or not class GFG {
// function to check if binary
// representation of an integer
// has consecutive 1s
static boolean checkFibinnary( int n)
{
// stores the previous last bit
// initially as 0
int prev_last = 0 ;
while (n != 0 )
{
// if current last bit and
// previous last bit is 1
if ((n & 1 ) != 0 && prev_last != 0 )
return false ;
// stores the last bit
prev_last = n & 1 ;
// right shift the number
n >>= 1 ;
}
return true ;
}
// Driver code to check above function
public static void main(String[] args)
{
int n = 10 ;
if (checkFibinnary(n) == true )
System.out.println( "YES" );
else
System.out.println( "NO" );
}
} // This code is contributed by // Smitha Dinesh Semwal |
# Python 3 program to check if a # number is fibinnary number or # not # function to check if binary # representation of an integer # has consecutive 1s def checkFibinnary(n):
# stores the previous last bit
# initially as 0
prev_last = 0
while (n):
# if current last bit and
# previous last bit is 1
if ((n & 1 ) and prev_last):
return False
# stores the last bit
prev_last = n & 1
# right shift the number
n >> = 1
return True
# Driver code n = 10
if (checkFibinnary(n)):
print ( "YES" )
else :
print ( "NO" )
# This code is contributed by Smitha Dinesh Semwal |
// C# program to check if a number // is fibinnary number or not using System;
class GFG {
// function to check if binary
// representation of an integer
// has consecutive 1s
static bool checkFibinnary( int n)
{
// stores the previous last bit
// initially as 0
int prev_last = 0;
while (n != 0)
{
// if current last bit and
// previous last bit is 1
if ((n & 1) != 0 && prev_last != 0)
return false ;
// stores the last bit
prev_last = n & 1;
// right shift the number
n >>= 1;
}
return true ;
}
// Driver code to check above function
public static void Main()
{
int n = 10;
if (checkFibinnary(n) == true )
Console.WriteLine( "YES" );
else
Console.WriteLine( "NO" );
}
} // This code is contributed by vt_m. |
<?php // PHP program to check if a number // is fibinnary number or not // function to check if binary // representation of an integer // has consecutive 1s function checkFibinnary( $n )
{ // stores the previous last bit
// initially as 0
$prev_last = 0;
while ( $n )
{
// if current last bit and
// previous last bit is 1
if (( $n & 1) && $prev_last )
return false;
// stores the last bit
$prev_last = $n & 1;
// right shift the number
$n >>= 1;
}
return true;
} // Driver code $n = 10;
if (checkFibinnary( $n ))
echo "YES" ;
else echo "NO" ;
// This code is contributed by mits ?> |
<script> // javascript program to check if a number
// is fibinnary number or not
// function to check if binary
// representation of an integer
// has consecutive 1s
function checkFibinnary(n) {
// stores the previous last bit
// initially as 0
var prev_last = 0;
while (n != 0) {
// if current last bit and
// previous last bit is 1
if ((n & 1) != 0 && prev_last != 0)
return false ;
// stores the last bit
prev_last = n & 1;
// right shift the number
n >>= 1;
}
return true ;
}
// Driver code to check above function
var n = 10;
if (checkFibinnary(n) == true )
document.write( "YES" );
else
document.write( "NO" );
// This code contributed by Rajput-Ji </script> |
Output:
YES
Time Complexity: O(logN), as we are using a loop to traverse logN times, we are decrementing by floor division of 2 (as right shifting a number by 1 is equivalent to floor division by 2) in each iteration therefore the loop iterates logN times.
Auxiliary Space: O(1), as we are not using any extra space.
Fibbinary Numbers (No consecutive 1s in binary) – O(1) Approach