我想把pow(2.0,(n-8))的返回值除以86399。问题出在10 <= n <= 100000000上。
我怎么处理这么大的返回值呢?
我使用的是Ubuntu11.10 64位,使用C++ 4.0.0-8
发布于 2012-08-20 17:07:11
这个讨论应该会回答你的问题Modular Exponentiation for high numbers in C++
对于这么大的数字,你必须做一些聪明的事情。在没有bigint库的情况下,你不可能以任何合理的方式天真地表示这个完整的数字,即使这样,它也太大了,不能使用暴力。这个数字本身就会占用几十兆字节。
发布于 2012-08-20 16:59:17
除非你使用一个大数字库,否则你不能。64位不能容纳这么大的数字。即使到那时,这也可能需要一段时间。2^(86392)大约有26000位数字。
如果你只想得到一个模数,有一些很好的算法。参见http://en.wikipedia.org/wiki/Modular_exponentiation。
如果您还想尝试bignums,请查看http://gmplib.org/。
发布于 2012-08-20 16:59:35
一种非常简单的方法是使用GMP -- http://gmplib.org/
https://stackoverflow.com/questions/12034747
复制相似问题