我想将pow(2.0,(n-8))
的返回值除以86399。
问题是10 <= n <= 100000000
。
如何处理如此大的回报值?
我在Ubuntu 11.10 64位,使用C ++ 4.0.0-8
答案 0 :(得分:4)
除非你使用大数字库,否则你不能。 64位不能容纳那么大的数字。即便如此,它可能还需要一段时间。 2 ^(86392)中有大约26000个数字。
如果你想获得一个模数,那么有一些很好的算法。请参阅http://en.wikipedia.org/wiki/Modular_exponentiation。
如果您想继续尝试bignums,请查看http://gmplib.org/。
答案 1 :(得分:1)
一种非常简单的方法是使用GMP - http://gmplib.org/
答案 2 :(得分:0)
此讨论应该回答您的问题Modular Exponentiation for high numbers in C++
对于那么大的数字,你必须做一些聪明的事情。如果没有bigint库,你无法用任何合理的方式天真地代表那个完整的数字,即便如此,它对于暴力来说真的太大了。这个数字本身需要几十兆字节。