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
// 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
// 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 |
Python3
# 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#
// 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 // 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 ?> |
Javascript
<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
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!