結果
| 問題 |
No.526 フィボナッチ数列の第N項をMで割った余りを求める
|
| コンテスト | |
| ユーザー |
S33582754S
|
| 提出日時 | 2021-11-12 23:27:14 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,098 bytes |
| コンパイル時間 | 333 ms |
| コンパイル使用メモリ | 81,920 KB |
| 実行使用メモリ | 52,608 KB |
| 最終ジャッジ日時 | 2024-11-25 21:46:37 |
| 合計ジャッジ時間 | 1,480 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 WA * 2 |
| other | AC * 1 WA * 11 |
ソースコード
# 行列A, Bの積
def matrix_mul(A,B,mod = None):
row = len(A)
column = len(A[0])
temp = [[0]*column for _ in range(row)]
if mod is None:
for i in range(row):
for j in range(column):
for k in range(column):
temp[i][j] += A[i][k] * B[k][j]
return temp
else:
for i in range(row):
for j in range(column):
for k in range(column):
temp[i][j] += A[i][k] * B[k][j] % mod
return temp
# 行列Aのn乗(行列累乗)
def matrix_pow(A,n,mod = None):
nbit = list(str(bin(n))[2:])
nbit = [int(i) for i in nbit]
row = len(A)
column = len(A[0])
B = A
C = [[0]*column for _ in range(row)]
for i in range(row):
C[i][i] = 1
if mod is None:
for i in range(-1, -len(nbit)-1, -1):
if nbit[i] == 1:
C = matrix_mul(C, B)
B = matrix_mul(B, B)
return C
else:
for i in range(-1, -len(nbit)-1, -1):
if nbit[i] == 1:
C = matrix_mul(C, B, mod)
B = matrix_mul(B, B, mod)
return C
N, M = map(int, input().split())
A = [[1, 1], [1, 0]]
print(matrix_pow(A, 9, M)[0][1])
S33582754S