2

プロジェクトオイラーの問題50を解決しようとしています。私に答えを与えたり、私のためにそれを解決したりしないでください。この特定の質問に答えてみてください。

目標は、100万未満の素数に追加される連続する素数の最長の合計を見つけることです。n以下の素数をすべて見つけるためにふるいを書き、それが正しいことを確認しました。次に、次の方法を使用して、連続する素数の各サブセットの合計を確認します。

空のリストがありますsums。素数ごとに、の各要素に追加しsumsて新しい合計を確認してから、に素数を追加しますsums

これはPythonです

primes = allPrimesBelow(1000000)
sums = []
for p in primes:
    for i in range(len(sums)):
        sums[i] += p
        check(sums[i])
    sums.append(p)

check()100万未満の2つ以上の連続する素数のすべての合計を要求したかどうかを知りたい

問題は、21個の連続する素数の合計として書くことができる素数953があることを示していますが、私はそれを見つけていません。

4

2 に答える 2

5

あなたのコードは正しいです。私はそれを実行しました、そしてそれは数953を生成します、それで問題はおそらくあなたの素数母関数にあります。100万未満の78498素数があるはずです-その結果が得られるかどうかを確認することをお勧めします。

とはいえ、check()を3,080,928,753回呼び出すため、コードの実行には長い時間がかかります。より少ない合計をチェックする方法を見つけたいと思うかもしれません。ネタバレを要求されていないので、これについては詳しく説明しませんが、一般的なヒントに興味がある場合はお知らせください。

于 2010-05-02T16:06:52.133 に答える
0

頭のてっぺんから正解はわかりませんが、合計をネストされた配列にしてから、合計カウンターに追加するのではなく、素数pをサブ配列に追加してみましたか?これにより、各サブ配列に追加されている素数を視覚的に確認でき、ひいては、元のコードが合計されていた素数がわかります。

于 2010-05-02T16:08:58.493 に答える