가 되므로, 위 행렬의 거듭제곱을 계산하면 쉽게 구할 수 있다. 행렬의 거듭제곱은 다음 코드로 갈음하도록 하겠다.
풀이 코드
MOD = 1000000007
def matmul(mat1, mat2) :
new_mat = [[0]*2 for _ in range(2)]
for i in range(2) :
for j in range(2) :
tmp = 0
for k in range(2):
tmp += mat1[i][k]*mat2[k][j]
new_mat[i][j] = tmp % MOD
return new_mat
def mat_pow(mat, p) :
if p == 1 :
return mat
pmat = mat_pow(mat, p//2)
pmat = matmul(pmat, pmat)
if p % 2 == 0 :
return pmat
else :
return matmul(pmat, mat)
def solution():
a, b, m1, m2, n = map(int, input().split())
if n == 1 :
print(b)
return
mat = [[m1, m2], [1, 0]]
pmat = mat_pow(mat, n-1)
print((b*pmat[0][0] + a*pmat[0][1])%MOD)
solution()