Skip to content
Related Articles
Get the best out of our app
GFG App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Fibbinary Numbers (No consecutive 1s in binary)

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

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
 


My Personal Notes arrow_drop_up
Last Updated : 08 Jun, 2022
Like Article
Save Article
Similar Reads
Related Tutorials