Last digit of sum of numbers in the given range in the Fibonacci series - GeeksforGeeks

12 Nov, 2021
Given two non-negative integers M, N which signifies the range [M, N] where M ≤ N, the task is to find the last digit of the sum of FM + FM+1... + FN where FK is the Kth Fibonacci number in the Fibonacci series.  
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...  
Examples:  
Input: M = 3, N = 9 Output: 6 Explanation: We need to find F3 + F4 + F5 + F6 + F7 + F8 + F9 => 2 + 3 + 5 + 8 + 13 + 21 + 34 = 86. Clearly, the last digit of the sum is 6.Input: M = 3, N = 7 Output: 1 Explanation: We need to find F3 + F4 + F5 + F6 + F7 => 2 + 3 + 5 + 8 + 13 = 31. Clearly, the last digit of the sum is 1.  
 
Naive Approach: The naive approach for this problem is to one by one find the sum of all Kth Fibonacci Numbers where K lies in the range [M, N] and return the last digit of the sum in the end. The time complexity for this approach is O(N) and this method fails for higher-ordered values of N. Efficient Approach: An efficient approach for this problem is to use the concept of Pisano Period.  
The idea is to calculate the sum of (M – 1) and N Fibonacci numbers respectively, and subtracting the last digit of the computed values.
This is because the last digit of the sum of all the Kth Fibonacci numbers such that K lies in the range [M, N] is equal to the difference of the last digits of the sum of all the Kth Fibonacci numbers in the range [0, N] and the sum of all the Kth Fibonacci numbers in the range [0, M – 1].
These values can respectively be calculated by the concept of the Pisano period in a very short time.
Let’s understand how the Pisano period works. The following table illustrates the first 10 Fibonacci numbers along with its values obtained when modulo 2 is performed on the numbers. 
 
Clearly, the Pisano period for (Fi mod 2) is 3 since 011 repeat itself and length(011) = 3.
Now, lets observe the following identity:  
7 = 2 * 3 + 1 Dividend = (Quotient × Divisor) + Remainder => F7 mod 2 = F1 mod 2 = 1.  
Therefore, instead of calculating the last digit of the sum of all numbers in the range [0, N], we simply calculate the sum until the remainder given that the Pisano period for Fi mod 10 is 60.
Below is the implementation of the above approach: 
C++
Java
Python3
C#
Javascript
// C++ program to calculate// last digit of the sum of the// fibonacci numbers from M to N#include<bits/stdc++.h>using namespace std; // Calculate the sum of the first// N Fibonacci numbers using Pisano// periodlong long fib(long long n){         // The first two Fibonacci numbers    long long f0 = 0;    long long f1 = 1;     // Base case    if (n == 0)        return 0;    if (n == 1)        return 1;    else    {        // Pisano period for % 10 is 60        long long rem = n % 60;         // Checking the remainder        if(rem == 0)           return 0;         // The loop will range from 2 to        // two terms after the remainder        for(long long i = 2; i < rem + 3; i++)        {           long long f = (f0 + f1) % 60;           f0 = f1;           f1 = f;        }                 long long s = f1 - 1;        return s;    }} // Driver Codeint main(){    long long m = 10087887;    long long n = 2983097899;     long long final = abs(fib(n) - fib(m - 1));    cout << final % 10 << endl;} // This code is contributed by Bhupendra_Singh
// Java program to calculate// last digit of the sum of the// fibonacci numbers from M to Nimport java.util.*; class GFG{ // Calculate the sum of the first// N Fibonacci numbers using Pisano// periodstatic int fib(long n){         // The first two Fibonacci numbers    int f0 = 0;    int f1 = 1;     // Base case    if (n == 0)        return 0;    if (n == 1)        return 1;    else    {                 // Pisano period for % 10 is 60        int rem = (int) (n % 60);         // Checking the remainder        if(rem == 0)        return 0;         // The loop will range from 2 to        // two terms after the remainder        for(int i = 2; i < rem + 3; i++)        {           int f = (f0 + f1) % 60;           f0 = f1;           f1 = f;        }                 int s = f1 - 1;        return s;    }} // Driver Codepublic static void main(String args[]){    int m = 10087887;    long n = 2983097899L;    int Final = (int)Math.abs(fib(n) -                              fib(m - 1));         System.out.println(Final % 10);}} // This code is contributed by AbhiThakur
# Python3 program to calculate# Last Digit of the sum of the# Fibonacci numbers from M to N # Calculate the sum of the first# N Fibonacci numbers using Pisano# perioddef fib(n):     # The first two Fibonacci numbers    f0 = 0    f1 = 1     # Base case    if (n == 0):        return 0    if (n == 1):        return 1    else:         # Pisano Period for % 10 is 60        rem = n % 60         # Checking the remainder        if(rem == 0):            return 0         # The loop will range from 2 to        # two terms after the remainder        for i in range(2, rem + 3):            f =(f0 + f1)% 60            f0 = f1            f1 = f         s = f1-1        return(s) # Driver codeif __name__ == '__main__':         m = 10087887    n = 2983097899     final = fib(n)-fib(m-1)     print(final % 10)
// C# program to calculate// last digit of the sum of the// fibonacci numbers from M to Nusing System; class GFG{ // Calculate the sum of the first// N fibonacci numbers using Pisano// periodstatic int fib(long n){         // The first two fibonacci numbers    int f0 = 0;    int f1 = 1;     // Base case    if (n == 0)        return 0;    if (n == 1)        return 1;    else    {                 // Pisano period for % 10 is 60        int rem = (int)(n % 60);         // Checking the remainder        if(rem == 0)           return 0;         // The loop will range from 2 to        // two terms after the remainder        for(int i = 2; i < rem + 3; i++)        {           int f = (f0 + f1) % 60;           f0 = f1;           f1 = f;        }                 int s = f1 - 1;        return s;    }} // Driver Codepublic static void Main(){    int m = 10087887;    long n = 2983097899L;    int Final = (int)Math.Abs(fib(n) -                              fib(m - 1));         Console.WriteLine(Final % 10);}} // This code is contributed by Code_Mech
<script>// javascript program to calculate// last digit of the sum of the// fibonacci numbers from M to N     // Calculate the sum of the first    // N Fibonacci numbers using Pisano    // period    function fib(n) {         // The first two Fibonacci numbers        var f0 = 0;        var f1 = 1;         // Base case        if (n == 0)            return 0;        if (n == 1)            return 1;        else {             // Pisano period for % 10 is 60            var rem = parseInt( (n % 60));             // Checking the remainder            if (rem == 0)                return 0;             // The loop will range from 2 to            // two terms after the remainder            for (i = 2; i < rem + 3; i++) {                var f = (f0 + f1) % 60;                f0 = f1;                f1 = f;            }             var s = f1 - 1;            return s;        }    }     // Driver Code    var m = 10087887;    var n = 2983097899;    var Final = parseInt( Math.abs(fib(n) - fib(m - 1)));     document.write(Final % 10); // This code is contributed by Rajput-Ji</script>
5
 
Time Complexity: O(1), because this code runs almost 60 times for any input number. 
Auxiliary Space: O(1) 
bgangwar59
abhaysingh290895
Code_Mech
shobitham1
Rajput-Ji
subham348
Fibonacci
series
series-sum
Mathematical
Pattern Searching
Write From Home
Mathematical
series
Fibonacci
Pattern Searching
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Find all factors of a natural number | Set 1
Check if a number is Palindrome
Program to print prime numbers from 1 to N.
Program to add two binary strings
Fizz Buzz Implementation
KMP Algorithm for Pattern Searching
Rabin-Karp Algorithm for Pattern Searching
Check if a string is substring of another
Naive algorithm for Pattern Searching
Boyer Moore Algorithm for Pattern Searching