Program to find last digit of n'th Fibonacci Number - GeeksforGeeks

09 Dec, 2021
Given a number ‘n’, write a function that prints the last digit of n’th (‘n’ can also be a large number) Fibonacci number. Examples :  
Input : n = 0
Output : 0

Input: n = 2
Output : 1

Input : n = 7
Output : 3
 
Method 1 : (Naive Method) Simple approach is to calculate the n’th Fibonacci number and printing the last digit.  
C++
Java
Python3
C#
PHP
Javascript
// C++ Program to find last digit// of nth Fibonacci number#include <bits/stdc++.h>using namespace std; typedef long long int ll; void multiply(ll F[2][2], ll M[2][2]);void power(ll F[2][2], ll n); // Function that returns// nth Fibonacci numberll fib(int n){    ll F[2][2] = {{1, 1}, {1, 0}};    if (n == 0)        return 0;    power(F, n - 1);    return F[0][0];} // Utility method to find// n'th power of F[][]void power(ll F[2][2], ll n){    // Base cases    if (n == 0 || n == 1)        return;     ll M[2][2] = {{1, 1}, {1, 0}};     power(F, n / 2);    multiply(F, F);     if (n % 2 != 0)        multiply(F, M);} // Utility function to multiply two// matrices and store result in first.void multiply(ll F[2][2], ll M[2][2]){    ll x = F[0][0] * M[0][0] +           F[0][1] * M[1][0];    ll y = F[0][0] * M[0][1] +           F[0][1] * M[1][1];    ll z = F[1][0] * M[0][0] +           F[1][1] * M[1][0];    ll w = F[1][0] * M[0][1] +           F[1][1] * M[1][1];     F[0][0] = x;    F[0][1] = y;    F[1][0] = z;    F[1][1] = w;} // Returns last digit of// n'th Fibonacci Numberint findLastDigit(int n){return fib(n) % 10;} // Driver codeint main(){    ll n = 1;    cout << findLastDigit(n) << endl;    n = 61;    cout << findLastDigit(n) << endl;    n = 7;    cout << findLastDigit(n) << endl;    n = 67;    cout << findLastDigit(n) << endl;    return 0;}
// Java program to find last digit// of nth Fibonacci numberclass GFG{    // Function that returns    // nth Fibonacci number    static long fib(long n)    {        long F[][] = new long[][] {{1, 1}, {1, 0}};        if (n == 0)            return 0;        power(F, n - 1);         return F[0][0];    }     // Utility function to multiply two    // matrices and store result in first.    static void multiply(long F[][], long M[][])    {        long x = F[0][0] * M[0][0] +                 F[0][1] * M[1][0];        long y = F[0][0] * M[0][1] +                 F[0][1] * M[1][1];        long z = F[1][0] * M[0][0] +                 F[1][1] * M[1][0];        long w = F[1][0] * M[0][1] +                 F[1][1] * M[1][1];         F[0][0] = x;        F[0][1] = y;        F[1][0] = z;        F[1][1] = w;    }     // Optimized version of power() in method 4    static void power(long F[][], long n)    {        if( n == 0 || n == 1)            return;        long M[][] = new long[][] {{1, 1}, {1, 0}};         power(F, n / 2);        multiply(F, F);         if (n % 2 != 0)            multiply(F, M);    }     // Returns last digit of    // n'th Fibonacci Number    long findLastDigit(long n)    {        return (fib(n) % 10);    }     // Driver code    public static void main(String[] args)    {        int n;        GFG ob = new GFG();        n = 1;        System.out.println(ob.findLastDigit(n));        n = 61;        System.out.println(ob.findLastDigit(n));        n = 7;        System.out.println(ob.findLastDigit(n));        n = 67;        System.out.println(ob.findLastDigit(n));    }}
# Python3 program to find last digit of# nth Fibonacci number # Function that returns nth Fibonacci numberdef fib(n):     F = [[1, 1], [1, 0]];    if (n == 0):        return 0;    power(F, n - 1);     return F[0][0]; # Utility function to multiply two# matrices and store result in first.def multiply(F, M):     x = F[0][0] * M[0][0] + F[0][1] * M[1][0];    y = F[0][0] * M[0][1] + F[0][1] * M[1][1];    z = F[1][0] * M[0][0] + F[1][1] * M[1][0];    w = F[1][0] * M[0][1] + F[1][1] * M[1][1];     F[0][0] = x;    F[0][1] = y;    F[1][0] = z;    F[1][1] = w; # Optimized version of power() in# method 4def power(F, n):     if( n == 0 or n == 1):        return;    M = [[1, 1], [1, 0]];     power(F, int(n / 2));    multiply(F, F);     if (n % 2 != 0):        multiply(F, M); # Returns last digit of# n'th Fibonacci Numberdef findLastDigit(n):     return (fib(n) % 10); # Driver coden = 1;print(findLastDigit(n));n = 61;print(findLastDigit(n));n = 7;print(findLastDigit(n));n = 67;print(findLastDigit(n)); # This code is contributed# by chandan_jnu
// C# program to find last digit// of nth Fibonacci numberusing System; class GFG{         // function that returns    // nth Fibonacci number    static long fib(long n)    {        long [,]F = new long[,] {{1, 1}, {1, 0}};                 if (n == 0)            return 0;                     power(F, n - 1);         return F[0, 0];    }     // Utility function to multiply two    // matrices and store result in first.    static void multiply(long [,]F, long [,]M)    {        long x = F[0, 0] * M[0, 0] +                 F[0, 1] * M[1, 0];        long y = F[0, 0] * M[0, 1] +                 F[0, 1] * M[1, 1];        long z = F[1, 0] * M[0, 0] +                 F[1, 1] * M[1, 0];        long w = F[1, 0] * M[0, 1] +                 F[1, 1] * M[1, 1];         F[0, 0] = x;        F[0, 1] = y;        F[1, 0] = z;        F[1, 1] = w;    }     // Optimized version of power() in method 4    static void power(long [,]F, long n)    {        if( n == 0 || n == 1)            return;        long [,]M = new long[,] {{1, 1}, {1, 0}};         power(F, n / 2);        multiply(F, F);         if (n % 2 != 0)            multiply(F, M);    }     // Returns last digit of    // n'th Fibonacci Number    static long findLastDigit(long n)    {        return (fib(n) % 10);    }     // Driver code    public static void Main()    {        int n;        n = 1;        Console.WriteLine(findLastDigit(n));        n = 61;        Console.WriteLine(findLastDigit(n));        n = 7;        Console.WriteLine(findLastDigit(n));        n = 67;        Console.WriteLine(findLastDigit(n));    }} // This code is contributed by Sam007.
<?php// PHP program to find last digit of nth// Fibonacci number // Function that returns nth Fibonacci numberfunction fib($n){    $F = array(array(1, 1),               array(1, 0));    if ($n == 0)        return 0;    power($F, $n - 1);     return $F[0][0];} // Utility function to multiply two// matrices and store result in first.function multiply(&$F, &$M){    $x = $F[0][0] * $M[0][0] +         $F[0][1] * $M[1][0];    $y = $F[0][0] * $M[0][1] +         $F[0][1] * $M[1][1];    $z = $F[1][0] * $M[0][0] +         $F[1][1] * $M[1][0];    $w = $F[1][0] * $M[0][1] +         $F[1][1] * $M[1][1];     $F[0][0] = $x;    $F[0][1] = $y;    $F[1][0] = $z;    $F[1][1] = $w;} // Optimized version of power() in method 4function power(&$F, $n){    if( $n == 0 || $n == 1)        return;    $M = array(array(1, 1), array(1, 0));     power($F, (int)($n / 2));    multiply($F, $F);     if ($n % 2 != 0)        multiply($F, $M);} // Returns last digit of// n'th Fibonacci Numberfunction findLastDigit($n){    return (fib($n) % 10);} // Driver code$n = 1;echo findLastDigit($n) . "\n";$n = 61;echo findLastDigit($n) . "\n";$n = 7;echo findLastDigit($n) . "\n";$n = 67;echo findLastDigit($n) . "\n"; // This code is contributed// by Akanksha Rai
<script>       // Javascript program to find last digit of nth Fibonacci number         // Function that returns    // nth Fibonacci number    function fib(n)    {        let F = [[1, 1], [1, 0]];        if (n == 0)            return 0;        power(F, n - 1);          return F[0][0];    }      // Utility function to multiply two    // matrices and store result in first.    function multiply(F, M)    {        let x = F[0][0] * M[0][0] +                 F[0][1] * M[1][0];        let y = F[0][0] * M[0][1] +                 F[0][1] * M[1][1];        let z = F[1][0] * M[0][0] +                 F[1][1] * M[1][0];        let w = F[1][0] * M[0][1] +                 F[1][1] * M[1][1];          F[0][0] = x;        F[0][1] = y;        F[1][0] = z;        F[1][1] = w;    }      // Optimized version of power() in method 4    function power(F, n)    {        if( n == 0 || n == 1)            return;        let M = [[1, 1], [1, 0]];          power(F, parseInt(n / 2, 10));        multiply(F, F);          if (n % 2 != 0)            multiply(F, M);    }      // Returns last digit of    // n'th Fibonacci Number    function findLastDigit(n)    {        return (fib(n) % 10);    }         let n;    n = 1;    document.write(findLastDigit(n) + "</br>");    n = 61;    document.write(findLastDigit(n) + "</br>");    n = 7;    document.write(findLastDigit(n) + "</br>");    n = 67;    document.write(findLastDigit(n)); </script>
Output:  
1
1
3
3
Complexity: O(Log n).Limitation of this implementation: Fibonacci numbers grow exponentially fast. For example, the 200’th Fibonacci number equals 280571172992510140037611932413038677189525. And F(1000) does not fit into the standard C++ int type. To overcome this difficulty, instead of calculating n’th Fibonacci number, there is a direct algorithm to just calculate its last digit (that is, F(n) mod 10).Method 2 : (Direct Method) Look at the final digit in each Fibonacci number – the units digit: 
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...
Is there a pattern in the final digits? 
0, 1, 1, 2, 3, 5, 8, 3, 1, 4, 5, 9, 4, 3, 7, 0, 7, ...
Yes! It takes a while before it is noticeable. In fact, the series is just 60 numbers long and then it repeats the same sequence again and again all the way through the Fibonacci series – for ever. The series of final digits repeats with a cycle length of 60 (Refer this for explanations of this result).So, instead of calculating the Fibonacci number again and again, pre-compute the units digit of first 60 Fibonacci number and store it in an array and use that array values for further calculations.  
C++
Java
Python3
C#
PHP
Javascript
// Optimized Program to find last// digit of nth Fibonacci number#include<bits/stdc++.h>using namespace std; typedef long long int ll; // Finds nth fibonacci numberll fib(ll f[], ll n){    // 0th and 1st number of    // the series are 0 and 1    f[0] = 0;    f[1] = 1;     // Add the previous 2 numbers    // in the series and store    // last digit of result    for (ll i = 2; i <= n; i++)        f[i] = (f[i - 1] + f[i - 2]) % 10;     return f[n];} // Returns last digit of n'th Fibonacci Numberint findLastDigit(int n){    ll f[60] = {0};     // Precomputing units digit of     // first 60 Fibonacci numbers    fib(f, 60);     return f[n % 60];} // Driver codeint main (){    ll n = 1;    cout << findLastDigit(n) << endl;    n = 61;    cout << findLastDigit(n) << endl;    n = 7;    cout << findLastDigit(n) << endl;    n = 67;    cout << findLastDigit(n) << endl;    return 0;}
// Optimized Java program to find last// digit of n'th Fibonacci numberclass GFG{    // Filongs f[] with first    // 60 Fibonacci numbers    void fib(int f[])    {        // 0th and 1st number of        // the series are 0 and 1        f[0] = 0;        f[1] = 1;         // Add the previous 2 numbers        // in the series and store        // last digit of result        for (int i = 2; i <= 59; i++)            f[i] = (f[i - 1] + f[i - 2]) % 10;    }     // Returns last digit of n'th Fibonacci Number    int findLastDigit(long n)    {        // In Java, values are 0 by default        int f[] = new int[60];         // Precomputing units digit of        // first 60 Fibonacci numbers        fib(f);             int index = (int)(n % 60L);         return f[index];    }     // Driver code    public static void main(String[] args)    {        long n;        GFG ob = new GFG();        n = 1;        System.out.println(ob.findLastDigit(n));        n = 61;        System.out.println(ob.findLastDigit(n));        n = 7;        System.out.println(ob.findLastDigit(n));        n = 67;        System.out.println(ob.findLastDigit(n));    }}
# Optimized Python3 Program to find last# digit of nth Fibonacci number # Finds nth fibonacci numberdef fib(f, n):     # 0th and 1st number of    # the series are 0 and 1    f[0] = 0;    f[1] = 1;     # Add the previous 2 numbers    # in the series and store    # last digit of result    for i in range(2, n + 1):        f[i] = (f[i - 1] + f[i - 2]) % 10;     return f; # Returns last digit of n'th# Fibonacci Numberdef findLastDigit(n):    f = [0] * 61;     # Precomputing units digit of    # first 60 Fibonacci numbers    f = fib(f, 60);     return f[n % 60]; # Driver coden = 1;print(findLastDigit(n));n = 61;print(findLastDigit(n));n = 7;print(findLastDigit(n));n = 67;print(findLastDigit(n)); # This code is contributed# by chandan_jnu
// Optimized C# program to find last// digit of n'th Fibonacci numberusing System; class GFG {     // Filongs f[] with first    // 60 Fibonacci numbers    static void fib(int []f)    {                 // 0th and 1st number of        // the series are 0 and 1        f[0] = 0;        f[1] = 1;         // Add the previous 2 numbers        // in the series and store        // last digit of result        for (int i = 2; i <= 59; i++)            f[i] = (f[i - 1] + f[i - 2]) % 10;    }     // Returns last digit of n'th    // Fibonacci Number    static int findLastDigit(long n)    {        int []f = new int[60];         // Precomputing units digit of        // first 60 Fibonacci numbers        fib(f);             int index = (int)(n % 60L);         return f[index];    }     // Driver Code    public static void Main()    {        long n;        n = 1;        Console.WriteLine(findLastDigit(n));        n = 61;        Console.WriteLine(findLastDigit(n));        n = 7;        Console.WriteLine(findLastDigit(n));        n = 67;        Console.WriteLine(findLastDigit(n));    }} // This code is contributed by Sam007
<?php// Optimized PHP Program to find last// digit of nth Fibonacci number // Finds nth fibonacci numberfunction fib(&$f, $n){    // 0th and 1st number of    // the series are 0 and 1    $f[0] = 0;    $f[1] = 1;     // Add the previous 2 numbers    // in the series and store    // last digit of result    for ($i = 2; $i <= $n; $i++)        $f[$i] = ($f[$i - 1] +                  $f[$i - 2]) % 10;     return $f[$n];} // Returns last digit of n'th// Fibonacci Numberfunction findLastDigit($n){    $f = array_fill(0, 60, 0);     // Precomputing units digit of    // first 60 Fibonacci numbers    fib($f, 60);     return $f[$n % 60];} // Driver code$n = 1;print(findLastDigit($n) . "\n");$n = 61;print(findLastDigit($n) . "\n");$n = 7;print(findLastDigit($n) . "\n");$n = 67;print(findLastDigit($n) . "\n"); // This code is contributed// by chandan_jnu?>
<script>    // Optimized Javascript program to find last    // digit of n'th Fibonacci number         // Filongs f[] with first    // 60 Fibonacci numbers    function fib(f)    {                   // 0th and 1st number of        // the series are 0 and 1        f[0] = 0;        f[1] = 1;           // Add the previous 2 numbers        // in the series and store        // last digit of result        for (let i = 2; i <= 59; i++)            f[i] = (f[i - 1] + f[i - 2]) % 10;    }       // Returns last digit of n'th    // Fibonacci Number    function findLastDigit(n)    {        let f = new Array(60);        f.fill(0);           // Precomputing units digit of        // first 60 Fibonacci numbers        fib(f);               let index = (n % 60);           return f[index];    }         let n;    n = 1;    document.write(findLastDigit(n) + "</br>");    n = 61;    document.write(findLastDigit(n) + "</br>");    n = 7;    document.write(findLastDigit(n) + "</br>");    n = 67;    document.write(findLastDigit(n) + "</br>");         // This code is contributed by divyesh072019</script>
Output:  
1
1
3
3
Complexity: O(1).This article is contributed by Rahul Agrawal .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. 
Sam007
Chandan_Kumar
Akanksha_Rai
divyesh072019
suresh07
sweetyty
Fibonacci
large-numbers
MAQ Software
Modular Arithmetic
Mathematical
MAQ Software
Mathematical
Fibonacci
Modular Arithmetic
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
Operators in C / C++
The Knight's tour problem | Backtracking-1
Program for factorial of a number
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