Skip to content
Related Articles

Related Articles

Improve Article

Find Index of given fibonacci number in constant time

  • Difficulty Level : Easy
  • Last Updated : 18 Aug, 2021

We are given a Fibonacci number. The first few Fibonacci numbers are 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ….. 
We have to find the index of the given Fibonacci number, i.e. like Fibonacci number 8 is at index 6. 

Examples : 

Input : 13
Output : 7

Input : 34
Output : 9

Method 1 (Simple) 
A simple approach is to find Fibonacci numbers up to the given Fibonacci numbers and count the number of iterations performed.

C++




// A simple C++ program to find index of given
// Fibonacci number.
#include<bits/stdc++.h>
 
int findIndex(int n)
{
    // if Fibonacci number is less than 2,
    // its index will be same as number
    if (n <= 1)
        return n;
 
    int a = 0, b = 1, c = 1;
    int res = 1;
 
    // iterate until generated fibonacci number
    // is less than given fibonacci number
    while (c < n)
    {
        c = a + b;
         
        // res keeps track of number of generated
        // fibonacci number
 
        res++;
        a = b;
        b = c;
    }
    return res;
}
 
// Driver program to test above function
int main()
{
    int result = findIndex(21);
    printf("%d\n", result);
}
 
// This code is contributed by Saket Kumar

Java




// A simple Java program to find index of
// given Fibonacci number.
import java.io.*;
 
class GFG {
     
    static int findIndex(int n)
    {
         
        // if Fibonacci number is less
        // than 2, its index will be
        // same as number
        if (n <= 1)
            return n;
     
        int a = 0, b = 1, c = 1;
        int res = 1;
     
        // iterate until generated fibonacci
        // number is less than given
        // fibonacci number
        while (c < n)
        {
            c = a + b;
             
            // res keeps track of number of
            // generated fibonacci number
            res++;
            a = b;
            b = c;
        }
         
        return res;
    }
     
    // Driver program to test above function
    public static void main (String[] args)
    {
        int result = findIndex(21);
        System.out.println( result);
    }
}
 
// This code is contributed by anuj_67.

Python3




# A simple Python 3 program to find
# index of given Fibonacci number.
 
def findIndex(n) :
     
    # if Fibonacci number is less than 2,
    # its index will be same as number
    if (n <= 1) :
        return n
  
    a = 0
    b = 1
    c = 1
    res = 1
  
    # iterate until generated fibonacci number
    # is less than given fibonacci number
    while (c < n) :
        c = a + b
          
        # res keeps track of number of 
        # generated fibonacci number
        res = res + 1
        a = b
        b = c
         
    return res
 
# Driver program to test above function
result = findIndex(21)
print(result)
 
# this code is contributed by Nikita Tiwari

C#




// A simple C# program to
// find index of given
// Fibonacci number.
using System;
class GFG
{
    static int findIndex(int n)
    {
         
        // if Fibonacci number
        // is less than 2, its
        // index will be same
        // as number
        if (n <= 1)
            return n;
     
        int a = 0, b = 1, c = 1;
        int res = 1;
     
        // iterate until generated
        // fibonacci number is less
        // than given fibonacci number
        while (c < n)
        {
            c = a + b;
             
            // res keeps track of
            // number of generated
            // fibonacci number
            res++;
            a = b;
            b = c;
        }
         
        return res;
    }
     
    // Driver Code
    public static void Main ()
    {
        int result = findIndex(21);
        Console.WriteLine(result);
    }
}
 
// This code is contributed
// by anuj_67.

PHP




<?php
// A simple PHP program to
// find index of given
// Fibonacci number.
 
function findIndex($n)
{
     
    // if Fibonacci number
    // is less than 2,
    // its index will be
    // same as number
    if ($n <= 1)
        return $n;
 
    $a = 0; $b = 1; $c = 1;
    $res = 1;
 
    // iterate until generated
    // fibonacci number
    // is less than given
    // fibonacci number
    while ($c < $n)
    {
        $c = $a + $b;
         
        // res keeps track of
        // number of generated
        // fibonacci number
 
        $res++;
        $a = $b;
        $b = $c;
    }
    return $res;
}
 
// Driver Code
$result = findIndex(21);
echo($result);
 
// This code is contributed by Ajit.
?>

Javascript




<script>
 
// A simple Javascript program to
// find index of given
// Fibonacci number.
function findIndex(n)
{
       
    // If Fibonacci number
    // is less than 2, its
    // index will be same
    // as number
    if (n <= 1)
        return n;
   
    let a = 0, b = 1, c = 1;
    let res = 1;
   
    // Iterate until generated
    // fibonacci number is less
    // than given fibonacci number
    while (c < n)
    {
        c = a + b;
           
        // res keeps track of
        // number of generated
        // fibonacci number
        res++;
        a = b;
        b = c;
    }
    return res;
}
 
// Driver code
let result = findIndex(21);
document.write(result);
 
// This code is contributed by decode2207
 
</script>

Output: 

 8

Method 2 (Formula based)
But here, we needed to generate all the Fibonacci numbers up to a provided Fibonacci number. But, there is a quick solution to this problem. Let’s see how! Note that computing the log of a number is an O(1) operation on most platforms.



The fibonacci number is described as, 
Fn = 1 / sqrt(5) (pow(a,n) – pow(b,n)) where 
a = 1 / 2 ( 1 + sqrt(5) ) and b = 1 / 2 ( 1 – sqrt(5) )

On neglecting pow(b, n) which is very small because of the large value of n, we get 
n = round { 2.078087 * log(Fn) + 1.672276 } 
where round means round to the nearest integer.

Below is the implementation of the above idea. 

C++




// C++ program to find index of given Fibonacci
// number
#include<bits/stdc++.h>
 
int findIndex(int n)
{
    float fibo = 2.078087 * log(n) + 1.672276;
 
    // returning rounded off value of index
    return round(fibo);
}
 
// Driver program to test above function
int main()
{
    int n = 55;
    printf("%d\n", findIndex(n));
}

Java




// A simple Java program to find index of given
// Fibonacci number
public class Fibonacci
{
 
  static int findIndex(int n)
  {
    float fibo = 2.078087F * (float) Math.log(n) + 1.672276F;
 
    // returning rounded off value of index
    return Math.round(fibo);
  }
 
  public static void main(String[] args)
  {
    int result = findIndex(55);
    System.out.println(result);
  }
}

Python3




# Python 3 program to find index of given Fibonacci
# number
 
import math
def findIndex(n) :
    fibo = 2.078087 * math.log(n) + 1.672276
  
    # returning rounded off value of index
    return round(fibo)
 
 
# Driver program to test above function
n = 21
print(findIndex(n))
 
 
# This code is contributed by Nikita Tiwari.

C#




// A simple C# program to find
// index of given Fibonacci number
using System;
 
class Fibonacci {
 
static int findIndex(int n)
{
    float fibo = 2.078087F * (float) Math.Log(n) +
                                        1.672276F;
 
    // returning rounded off value of index
    return (int)(Math.Round(fibo));
}
 
  // Driver code
  public static void Main()
  {
    int result = findIndex(55);
    Console.Write(result);
  }
}
 
// This code is contributed by nitin mittal

PHP




<?php
// PHP program to find index
// of given Fibonacci Number
 
function findIndex($n)
{
    $fibo = 2.078087 * log($n) + 1.672276;
 
    // returning rounded off
    // value of index
    return round($fibo);
}
 
// Driver code
$n = 55;
echo(findIndex($n));
 
// This code is contributed by Ajit.
?>

Javascript




<script>
 
// A simple Javascript program to find
// index of given Fibonacci number
 
function findIndex(n)
{
    var fibo = 2.078087 * parseFloat(Math.log(n)) + 1.672276;
     
    // Returning rounded off value of index
    return Math.round(fibo);
}
 
// Driver code
var result = findIndex(55);
document.write(result);
 
// This code is contributed by Ankita saini
 
</script>

Output: 

 10

This article is contributed by Aditya Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.




My Personal Notes arrow_drop_up
Recommended Articles
Page :