を取得する理由を作るフィボナッチsequence.Can'tの用語を取得するように求められます再帰的シーケンスF(n + 2)= F(n + 1)+ F(n)のF(1)をそれぞれA、Bに割り当て、N番目の項目を尋ね、モジュロ+ 7)。私は解決する古典的な方法は、迅速な行列の乗法を使用している知っている。そして私はPython3でそれを書く。私のIDEのテストは問題ありません。しかし、なぜ私のコードは常にタイムアウトを取得するのか分からない。 :それはここにある私のコードは、常にそれがHackerrank.Theリンクでの問題ですタイムアウト
def mul22(a, b):
r = [[0, 0], [0, 0]]
r[0][0] = (a[0][0] * b[0][0] + a[0][1] * b[1][0]) % 1000000007
r[0][1] = (a[0][0] * b[0][1] + a[0][1] * b[1][1]) % 1000000007
r[1][0] = (a[1][0] * b[0][0] + a[1][1] * b[1][0]) % 1000000007
r[1][1] = (a[1][0] * b[0][1] + a[1][1] * b[1][1]) % 1000000007
return r
def MatrixPow(A, n):
if n == 1:
return A
if n % 2 == 1:
return mul22(mul22(MatrixPow(A, n // 2),MatrixPow(A, n // 2)), A)
return mul22(MatrixPow(A, n // 2), MatrixPow(A, n // 2))
for i in range(int(input())):
A,B,N= map(int,input().split())
if N == 1:
print(B % 1000000007)
else:
print(mul22(MatrixPow([[1, 1],[1, 0]], N - 1),[[B,1],[A,1]])[0][0] % 1000000007)
最初は問題だと思います10 ** 9 + 7はすべての再帰的プロセスを非常に遅くします。しかし、私はIDEで何度もテストして、すべてが大丈夫です.TLEはありません。欠けているものはありますか?
上記のように自分のコードを更新しました。しかし、何も変わっていません。間違っていますか?そうでない場合、多分Hackerrankの問題です。 –
あなたはそれを持って、ありがとう! –
これは完了しましたか? – vish4071