백준 11444 - 피보나치 수 6 (파이썬)

Updated:

Answer

def mul(a, b):
    tmp = [[0 for _ in range(N)] for _ in range(N)]

    for i in range(N):
        for j in range(N):
            for k in range(N):
                tmp[i][j] += a[i][k] * b[k][j]
            tmp[i][j] %= 1000000007

    return tmp

def power(b, m):
    if b == 1:
        return m
    else:
        tmp = power(b // 2, m)
        
        if b % 2 == 0:
            return mul(tmp, tmp)
        else:
            return mul(mul(tmp, tmp), m)

N = 2
P = int(input())
M = [[1, 1], [1, 0]]
print(power(P, M)[0][1])

Categories:

Updated: