def solve(N, K, X):
powK = np.eye(N, dtype=np.int64)
while K:
if K & 1:
powK = powK.dot(X)
powK %= MOD
X = X.dot(X)
X %= MOD
K //= 2
return powK.sum() % MOD
要素を掛け合わせるところまでならまだ60ビットなので、そこでmodをとってから足し合わせる
python
def solve(N, K, X):
def modmul(x, y):
ret = np.zeros(x.shape, np.int64)
for i in range(N):
for j in range(N):
v = x[i, :] * y[:, j]
v %= MOD
ret[i, j] = v.sum() % MOD
return ret
powK = np.eye(N, dtype=np.int64)
while K:
if K & 1:
powK = modmul(powK, X)
X = modmul(X, X)
K //= 2
return powK.sum() % MOD