Find Index of given fibonacci number in constant time - GeeksforGeeks

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++
Java
Python3
C#
PHP
Javascript
// 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 functionint main(){    int result = findIndex(21);    printf("%d\n", result);} // This code is contributed by Saket Kumar
// 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.
# 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 functionresult = findIndex(21)print(result) # this code is contributed by Nikita Tiwari
// 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// 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.?>
<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 codelet 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++
Java
Python3
C#
PHP
Javascript
// 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 functionint main(){    int n = 55;    printf("%d\n", findIndex(n));}
// A simple Java program to find index of given// Fibonacci numberpublic 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);  }}
# Python 3 program to find index of given Fibonacci# number import mathdef findIndex(n) :    fibo = 2.078087 * math.log(n) + 1.672276      # returning rounded off value of index    return round(fibo)  # Driver program to test above functionn = 21print(findIndex(n))  # This code is contributed by Nikita Tiwari.
// A simple C# program to find// index of given Fibonacci numberusing 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 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.?>
<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 codevar 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. 
nitin mittal
jit_t
vt_m
decode2207
ankita_saini
surindertarika1234
Fibonacci
Mathematical
Mathematical
Fibonacci
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Modulo Operator (%) in C/C++ with Examples
Print all possible combinations of r elements in a given array of size n
Program for factorial of a number
The Knight's tour problem | Backtracking-1
Operators in C / C++
Program to find sum of elements in a given array
Euclidean algorithms (Basic and Extended)
Program to print prime numbers from 1 to N.
Minimum number of jumps to reach end