Last digit of sum of numbers in the given range in the Fibonacci series
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, …
Input: M = 3, N = 9
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
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.
|Fi mod 2||0||1||1||0||1||1||0||1||1||0||10|
- 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:
Time Complexity: O(1), because this code runs almost 60 times for any input number.
Auxiliary Space: O(1), since no extra space has been taken.