Program to find last digit of n’th Fibonnaci 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

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



C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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));
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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

chevron_right



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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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));
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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
?>

chevron_right



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 contribute.geeksforgeeks.org or mail your article to contribute@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.



My Personal Notes arrow_drop_up