2009-06-26 8 views
18

私はまだ学生ですが、私はプロジェクトオイラーがとても楽しいと感じています。C++でProject Eulerの問題を解決するための最良のbignumライブラリですか?

場合によっては、プリミティブ型よりも大きな計算が必要になることがあります。私はあなたがそれを実装することができます知っているが、私はこれを行うにはあまりにも怠惰だ、

だから私はいくつかのライブラリ、

MAPM ::非常に優れた性能を試してみましたが、それならば、それはチェックする可能性が、唯一の大きな山車を提供します整数です。入力を受け入れることは非常に良いですが、出力を提供するのは厄介ですが、Visual C++ 2008 Expressで魔法のようにコンパイルしてください。

bigint ::小さなものですが、多くの部分で再エンジニアリングが必要です。非常に使いやすいが、非常に限られたパワー、そして他のものに比べて非常に遅い。大きな整数だけです。

ttmath ::今まで私が試した中で最も美しいものです!いくつかのファイルが含まれており、信じられないほどのパワー/シンプルさがあります。 Visual C++ 2008 Expressの魔法のようにコンパイルします。これは固定長の数値を提供するので高速です。 C++のメタプログラミングを使用して構築されています。私が見る唯一の欠点は、数字は実行時に長さが任意ではないということですが、コードを書くとき、あなたは非常に簡単1024K番号を持つことができ、

ttmath::UInt<1024 * 1024> reallyHugeUnsignedInteger; 

それは三種類用意されています署名、署名のないフロートを。

私はVC2008 Expressの下でgmpをコンパイルしようとしましたが、失敗しました!私はそれが最高であることを知っていますが、VC2008の下で初心者のためにコンパイルするのは簡単ではありません、VCの下でgmpをコンパイルするチュートリアルを指している場合も感謝します。

EDIT ::あなたはVC 2008を使用してGMPをコンパイルする方法を知っている場合は、私に説明し、報奨金をゲットしてください:)

EITDに::私が右の用語を使用していなかったようだ、だからここにありますWindows用の魔法のGMP! VC 2008で動作します。MPIR

+5

注:いくつかの問題を解決するためにbignumライブラリが必要な場合がありますが、ほとんどのオイラー問題にはそれが本当に必要ありません。非常に大きな数のプロパティを見つける必要があるときは、通常、プロパティを見つけるために実際に計算するのは非常に非効率的です。多くの場合、問題を分析してより良い解決策を見つける必要があります。たとえば、1000でゼロの数を見つける必要がある場合!、1000の実際の値を計算!非常に非効率的な解決策になるでしょう。 –

+0

良い点ですが、私はいつも最適な解決策を得ていません:) – AraK

+4

@Igor:非効率的なソリューションが1秒以内に実行され、書き込みに数分かかる場合、効率的なソリューションには興味がありません。はい、私はいくつかのオイラーの質問をしてきました。そして、はい、問題でGMPをスローすると直ちにそれを解決する機会がありました。 1000! 10 000バイナリディジット未満、それはおそらくPC上で計算することはかなり簡単です。確かに、1000で末尾のゼロの数を計算するよりも速いです!手で(しかし、それはあまりにもトリッキーなことではない)。 –

答えて

1

GMPシンプルなAPIは、永遠に周りにいた。

編集:ああ、あなたはそれを試しました。私は本当にそれをもう一度やり直すだろう、それは最高だ。ここで

+1

私が言ったように、私はVCの下で動作することはありませんでした。( – AraK

+0

提案:他のSO読者の利益のために、次回はリンクを追加してください。 – jwfearn

関連する問題