summaryrefslogtreecommitdiff
path: root/euler_684.py
blob: f5bbec7913abf834f4a25a445e58938403517c09 (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
#!/usr/bin/env python

_mod = 1000000007

def expmod(a,n,m):
    if n == 0:
        return 1

    if n % 2 == 0:
        t = expmod(a,n>>1,m)
        return (t*t)%m
    else:
        return (a*expmod(a,n-1,m))%m

def S(k):
    n = k // 9
    m = k % 9
    pwr = expmod(10,n,_mod)
    return 5*(pwr-1)-9*n+pwr*(m+2)*(m+1)//2-(m+1)

def main():
    fib = [0]*91
    fib[0] = 0
    fib[1] = 1
    for i in range(2,91):
        fib[i] = fib[i-2]+fib[i-1]

    ans = 0
    for i in range(2,91):
        print(i)
        ans = (ans + S(fib[i])) % _mod

    print(ans)

if __name__ == "__main__":
    main()