2010-11-24 19 views
3

私は最初の26個の素数の積を扱っています。これには52ビット以上の精度が必要です。これは最大倍精度で処理できると考えられ、小数点以下の28〜29桁の有効桁数以上が必要です。だから、これほど大きな数字に乗算と除算を実行するための戦略は何でしょうか?最大10進値より大きい数値での作業

また、パフォーマンスの影響は、これを実現するために飛躍しなければならないどのようなフープであってもかまいません。

最初の22個の素数(私は科学的なモードに落とすことなく、私の電卓に一緒に掛けることができ、ほとんど)の積である:

10,642,978,845,819,148,849,204,664,294,430 

最後の4の製品は

72,370,439 
です

一緒に掛け合わせると、次のようになります。

7.7023705133964511682328635583552e+38 

パフォーマンスには影響があります。素数ストリング比較ソリューションが文字の直線比較よりも実際の方が速いかどうかの問題を解決しようとしているからです。この調査を促した投稿はhereです。プロセッサは浮動小数点計算のために最適化されています。理想的には、私はどのような解決策でもその最適化の多くを活用したいと思っています。

TIA!
James

PS:私が持っているコードは、競合する解決策です。私は素数の解がおそらくもっと速くなるとは思わないが、私はできるだけ公平なチャンスを与えようとしている。

答えて

6

C#4.0ではBigIntegerを使用できます。古いバージョンでは、オープンソースライブラリが必要だと思います。this one

+0

私は4.0でこれを行うことができますが、私はそれをまだプレイしていませんが、それは完璧です。あなたがリンクしてくれた図書館はかなり印象的です... 2002年以降更新されていないのは驚きですが、おそらく必要がないでしょう。私はソースをチェックアウトします。非常に素晴らしい! –

+0

@James:与えられたリンクは、オープンソースサイトに優れたオープンソースライブラリがたくさんあることを伝える単なる例です。次回はライブラリが必要です。 –

0

私はあなたのリンク先の記事をインタビューの質問について読んでいます。これらの大きな整数を掛け算して除算するだけなので、巨大なの最適化は、それらを素因数分解形式に保つことです。それぞれの大きな整数はintの配列[0..25]であり、各要素は分解のn番目の素数の指数を表します。この形式で2つの大きな整数を乗算するには、単純に指数を要素ごとに追加します。分割する、指数を減算する。

しかし、これは2つの文字列の文字カウントを表にすることと同じです。

+0

ええと、私はまったくフォローしていません、さらに説明できますか、あるいはいくつかの例がありますか? –

関連する問題