我正在做一些大整数计算,我需要将BigInteger提升到另一个BigInteger的强大功能..pow()方法执行我想要的操作,但将int值作为参数..modPow方法将BigInteger作为参数,但我不希望答案与我正在尝试计算的值一致.
我的BigInteger指数太大而无法表示为int,有人可以建议一种解决此限制的方法吗?
Mar*_*ers 14
你不应该尝试用另一个非常大的数字来计算极大数的幂.结果数字会占用大量内存.如果你计算a.pow(b)它会有大约log(a)*b数字.如果b太大而不适合整数,那么即使很小a的结果值也会有几十亿个数字.
尝试重新思考您尝试实现的目标以及如何在不执行此操作的情况下实现目标.
实际的解决方案是将指数从BigInteger转换为int.
如果由于指数太大而无法执行此操作,则算法无法实现.结果数字几乎肯定太大而无法表示为BigInteger.(BigInteger使用一个字节数组来表示数字,2**31 - 1无论堆有多大,Java数组的最大大小都是元素.)即使你实现了一个代表数字的"BiggerInteger"类,你也可以很快就会推动机器物理内存大小的限制.(而且计算N.pow(M)所需的时间将是...... NP-tricky ...... O((MlogN)^M)我认为).
当然,如果你正在使用的数字是0,1或者-1,那么结果将很容易适合BigInteger.但在这些情况下,有更好的方法来计算功率:-).
| 归档时间: |
|
| 查看次数: |
6763 次 |
| 最近记录: |