0

pow(2.0,(n-8))の戻り値を86399で割りたいのですが、問題は10 <= n <= 100000000です。

このような大きな戻り値をどのように処理できますか?

私はUbuntu 11.10 64ビットで、C++ 4.0.0-8を使用しています

4

3 に答える 3

4

大きな数のライブラリを使用しない限り、できません。64 ビットでは、それほど大きな数値を保持できません。それでも、おそらくしばらく時間がかかります。2^(86392) には約 26000 桁あります。

モジュラスだけを取得したい場合は、そのための優れたアルゴリズムがいくつかあります。http://en.wikipedia.org/wiki/Modular_exponentiationを参照してください。

それでも bignum を試してみたい場合は、http://gmplib.org/ をチェックしてください

于 2012-08-20T08:59:17.470 に答える
1

非常に簡単な方法の 1 つは、GMP を使用することです -- http://gmplib.org/

于 2012-08-20T08:59:35.493 に答える
0

このディスカッションは、あなたの質問に答えるはずです C++ での大きな数に対する剰余指数

それほど大きな数の場合は、巧妙なことをしなければなりません。bigint ライブラリがなければ、合理的な方法で単純にその完全な数を表現する方法はありません。数自体は数十メガバイトを占めます。

于 2012-08-20T09:07:11.373 に答える