4

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: 
4

1 に答える 1