blob: 2f2c8394cf4ad6e9a8d62728cc7cdc30175f517f (
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
|
# Uses python3
import sys
def getFib(n):
if (n <= 1):
return n
fibLst = [None] * (n + 1)
fibLst[0] = 0
fibLst[1] = 1
for j in range(2, n + 1):
fibLst[j] = fibLst[j - 1] + fibLst[j - 2]
return fibLst[n]
def getPisanoPeriod(m):
period = 2
remainder1 = 1
remainder2 = 1
for i in range(3, 6 * m + 1):
period = period + 1
if (remainder2 == 1) & (remainder1 + remainder2 == m):
break
else:
tempHolder = remainder1 + remainder2
remainder1 = remainder2
if tempHolder >= m:
remainder2 = tempHolder - m
else:
remainder2 = tempHolder
return period
def getFibNModM(n, m):
p = getPisanoPeriod(m)
return getFib(n % p) % m
if __name__ == '__main__':
entryNumbers = sys.stdin.read()
tokens = entryNumbers.split()
n = int(tokens[0])
m = int(tokens[1])
print(getFibNModM(n, m))
|