私はプログラミングコンテストの予備的な問題を解決しようとしています。問題の2つを計算し、いくつかの非常に大きな整数(100 !、2^100)。言語のデータ構造に適合しない大きな整数を扱う方法
この大きな整数の威力を計算するには、速い方法が必要です。 ?
あなたは()ところで、私はCインタフェースと実装「任意精度演算」の項を読んで、それは(POWのために助けにはならない)私に
EDITを、このためのいくつかのアルゴリズムやデータ構造をアドバイスすることはできます:私は思います累乗法による累乗法とビットシフト法が動力学的に機能しますが、このintの階乗を計算するには速い方法が必要です。ありがとう。
EDIT2:興味のある人のために。
長さNのすべてのビット列を含む最短ビット列の長さを見つけてください(私の英語は申し訳ありませんが、例を挙げます)。例えば、長さ2(00,01,10,11)のビット列をすべて含む最短ビット列長が5(11001)である。
この問題に対する私のソリューションは、2^n個+ Nだった - 1(私は2のべき乗を計算する必要があります、私はビットシフトを使用すると思います)
他の問題は、2本の長さを考えると、ありますたとえば、入力は10,2,3です。次に、2と3で10に達するようにします(たとえば、2 + 2 + 2 + 2 + 2、2 + 2 + 3 + 3,3 + 2 + 2 + 3,3 + 3 + 2 + 2 ...)である。 1 < = N < 2^63。 mod 1000000007でanwserを計算します。
私の解は、2x + 3y = Nであり、x =(N-3y)/ 2でした。 0から2 * N/3までのyの場合、xが整数の場合、このXとYのtotalized =(x + y)の一般化置換を計算する必要があります。 /(x!* y!)である。
最大の引数(100以上?)とどのくらいの時間、それは答えを計算するためにとるべきである何? – user502144
問題は異なりますが、2^10000と100を計算する必要があります!解決する。制限時間は1秒、メモリ制限は256MBです。興味があれば問題を翻訳できます。別の解決策があるかもしれませんが、64ビットより大きい答えが問題テキストに書かれています。 – sinan
[重複していないロングロングは93フィボナッチ数を超えていませんか?](http://stackoverflow.com/questions/3125872/unsigned-long-long-wont-go-beyond-the-93th-fibonacci-番号) –