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

如果您还想尝试 bignums,请查看http://gmplib.org/

于 2012-08-20T08:59:17.470 回答
1

一种非常简单的方法是使用 GMP—— http ://gmplib.org/

于 2012-08-20T08:59:35.493 回答
0

这个讨论应该回答你的问题Modular Exponentiation for high numbers in C++

对于这么大的数字,你必须做一些聪明的事情。如果没有 bigint 库,你就无法以任何合理的方式天真地表示这个完整的数字,即便如此,它对于蛮力来说真的太大了。该数字本身将占用数十兆字节。

于 2012-08-20T09:07:11.373 回答