2009-06-18 10 views
1

可能性の重複:this question
プロジェクトオイラー#200のヘルプ?

Project Euler Problem 200.

と同様に
Need help solving Project Euler problem 200

私は実行に数時間かかり、Javaでの強引なソリューションを書いた、と生産私は十分であるべきだと思った最初の500+スクーブ番号。しかし、190から210までの答えのどれも正解ではないようです。

私がここで間違っていることと、これをどのように最適化できるのだろうと思います。問題はBigInteger.isProbablePrime()にありますか?

Stackoverflowがこれを尋ねるのに最適な場所かどうかは分かりませんが、私は固まっているようです。私は自分のコードと生成されたデータを含めました。

誰かにヒントやポインタを教えていただければ本当にありがたいです。

編集:私は最初の500,000の素数を使ってプログラムを再実行しました。走るのに1日かかりましたが、正解を出しました。

+0

私はオイラーの質問を見てから数週間経っていると思っていました。そして今、1人がポップアップします。不気味な...それが「その質問」の正確な複製であれば、なぜそれを再度投稿したのですか?あなたは戦いを探していますか? :-) – paxdiablo

+0

正確ではありません。他の1ヶ月は古いもので、別の意図があるようです。 – Lucky

+1

あなたはそれが正確な重複であると言って、とても愚かでした。私はそれを変更することをお勧めします。 – paxdiablo

答えて

16

私はProject Euler管理者です。他の人、特にコードと回答、さらには機能していないコードについても、この問題を台無しにする情報を投稿しないでください。それに応じて質問を編集してください。編集:そうしていただきありがとうございます!

ソルバーがウェブを使用して問題を解決するのに珍しいことではなく、そのようなスポイラーに遭遇した場合、楽しい思い出になります。 (はい、多くのソリューションが用意されているサイトがあることはわかっていますが、少なくとも一般的には簡単に問題の番号を小さくしています)

問題が発生していて、積極的にヒントを得るためにはforumsスポイラー用に編集されました。

+5

BS:答えが損なわれたくない場合、彼はページを避けることができます。 QED。 –

0

実行するには1日か1時間もかからない巧妙な解決策は考えられませんか? :D 問題はisProbablePrimeで、これは数字がプライムであることを保証しないと思います。見つかった素数はある確率で素数である可能性があります。 あなたは素数を見つけたことが確実なアルゴリズムを使用するべきです。

+1

isProbablyPrimeのポイントは、より特定のアルゴリズム。精度のレベルは、ブルートフォース計算が(ハードウェア障害のために)エラーを有する可能性が高いほど十分に高く調整することができる。それは遅さの原因ではありません。 –

+0

私はこれが遅さの原因であるということを意味しませんでした。私はそれが最初に動作しなかった問題を再実行して、彼がisProbablePrimeを使用している可能性があることを意味することを意味しました –

0

isProbablyPrimeが必ずしも正しいとは限りませんので、最初の答えは正しくありません(したがっておそらく)。 BigIntegerを使用しているため、一部で遅いです。関係するすべての値は長い間収まります。どうして長い?

0

時間を節約できる簡単なリファクタリングがあります。大部分の時間は入れ子になったforループで費やされているようです。大きさの次数はn乗の2乗です。ループをネストしないことで、複雑さを軽減できます。もう1つの問題は、必要以上の潜在的な結果を見つけていることです。あなたは200を見つける必要があります。あなたがより多くを見つける必要がある理由は、あなたが数字の順序で潜在的な結果を見つけていないという事実のためです。 TreeSetは結果を順番に保持しますが、200番目の結果が見つかった時点で停止できるのであれば、アルゴリズムは高速になります。

関連する問題