summaryrefslogtreecommitdiff
path: root/AlgoDesignAndTechniqueEdxPython/sources/lastdigitoffibsumagain.py
blob: 21de833d95a316a3216c19133f3ba6c3226aabcc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# Uses python3
import sys

FIB_PISANO_PERIOD_FOR_TEN = 60;

def getFibNModM(n):
    r = n % FIB_PISANO_PERIOD_FOR_TEN
    if r==0:
        return 0
    firstN = 0
    secondN = 1
    tempHolder = 1
    
    for _ in range(2, r + 1):
        tempHolder = (firstN + secondN) % 10;
        firstN = secondN
        secondN = tempHolder
#     return getFibOptimized(n % p) % m
    return secondN


def getLastDigit(n):
    if n<=1:
        return n
    result = getFibNModM(n+2)
    if result==0:
        return 9
    else:
        return result -1

def getPartialSumLastDigit(m, n):
    if m==n:
        return getFibNModM(n)
    else:
        sumFn=getLastDigit(n)
        if m<=1:
            sumFm = 0
        else:
            sumFm = getLastDigit(m-1)
        if sumFn>=sumFm:
            return sumFn-sumFm
        else:
            return sumFn - sumFm + 10

if __name__ == '__main__':
    input = sys.stdin.read()
    tokens = input.split()
    m = int(tokens[0])
    n = int(tokens[1])
    print(getPartialSumLastDigit(m, n))