Open In App

Program to find last digit of n’th Fibonacci Number

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

 

Recommended Practice

Method 1 : (Naive Method) 
Simple approach is to calculate the n’th Fibonacci number and printing the last digit. 
 




// 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 number
ll 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 Number
int findLastDigit(int n)
{
return fib(n) % 10;
}
 
// Driver code
int 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 number
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
    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 number
def 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 4
def 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 Number
def findLastDigit(n):
 
    return (fib(n) % 10);
 
# Driver code
n = 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 number
using 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 number
function 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 4
function 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 Number
function 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. 
 




// 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 number
ll 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 Number
int findLastDigit(int n)
{
    ll f[60] = {0};
 
    // Precomputing units digit of 
    // first 60 Fibonacci numbers
    fib(f, 60);
 
    return f[n % 60];
}
 
// Driver code
int 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 number
class 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 number
def 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 Number
def findLastDigit(n):
    f = [0] * 61;
 
    # Precomputing units digit of
    # first 60 Fibonacci numbers
    f = fib(f, 60);
 
    return f[n % 60];
 
# Driver code
n = 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 number
using 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 number
function 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 Number
function 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).

 


Article Tags :