【发布时间】:2012-08-15 14:40:18
【问题描述】:
我想将pow(2.0,(n-8))的返回值除以86399。
问题是10 <= n <= 100000000。
如何处理这么大的返回值?
我在 Ubuntu 11.10 64 位,使用 C++ 4.0.0-8
【问题讨论】:
-
请不要对我们大喊大叫 :)
我想将pow(2.0,(n-8))的返回值除以86399。
问题是10 <= n <= 100000000。
如何处理这么大的返回值?
我在 Ubuntu 11.10 64 位,使用 C++ 4.0.0-8
【问题讨论】:
这个讨论应该回答你的问题Modular Exponentiation for high numbers in C++
对于这么大的数字,你必须做一些聪明的事情。如果没有 bigint 库,你就无法以任何合理的方式天真地表示这个完整的数字,即便如此,它对于蛮力来说真的太大了。该数字本身将占用数十兆字节。
【讨论】:
一个非常简单的方法是使用 GMP -- http://gmplib.org/
【讨论】:
除非你使用大数字库,否则你不能。 64 位不能容纳那么大的数字。即便如此,也可能需要一段时间。 2^(86392) 中有大约 26000 个数字。
如果你只想得到一个模数,有一些很好的算法。见http://en.wikipedia.org/wiki/Modular_exponentiation。
如果您还想尝试 bignums,请查看 http://gmplib.org/。
【讨论】: