Python を使用して TalentBuddy の問題を解決しようとしています
問題は :
数値 N を指定すると、{1,2..N} セットを使用して形成できるサブセットの総数を標準出力に出力しますが、どのサブセットにも 2 つの連続する整数が含まれていないことを確認してください。最終カウントは非常に大きくなる可能性があるため、524287 を法として結果を出力する必要があります。
私はコードを処理しました。テスト 6 を除いて、すべてのテストに問題はありません。テストが関数の引数としてOverFlowError
送信されたときに取得しました。10000000
このエラーを解決するために何をすればよいかわかりません
私のコード:
import math
def count_subsets(n):
step1 = (1 / math.sqrt(5)) * (((1 + math.sqrt(5)) / 2) ** (n + 2))
step2 = (1 / math.sqrt(5)) * (((1 - math.sqrt(5)) / 2) ** (n + 2))
res = step1 - step2
print int(res) % 524287
これはメモリをかなり消費していると思います。インターネットで同じトピックの数式を見つけた後、これを書きました。
私のコードはPythonicではないと思います。
これを行う方法、「Pythonic」の方法は?を解決する方法はOverFlowError
?
編集:問題では、入力の例を示しました。3
結果(出力)は5
です。
説明: 5 つのセットは、{}, {1}, {2}, {3}, {1,3}
です。
ただし、テスト 6 では、私が与えた問題は次のとおりです。
テスト #6 のまとめ
入力テスト:
[10000000]
期待される出力:
165366
あなたの出力:
Traceback (most recent call last):
On line 4, in function count_subsets:
step1 = (1 / math.sqrt(5)) * (((1 + math.sqrt(5)) / 2) ** (n + 2))
OverflowError: