如何在不进行模运算的情况下将Java BigInteger提升为BigInteger的强大function?

我正在做一些大整数计算,我需要将BigInteger提升到另一个BigInteger的强大function。 .pow()方法可以实现我想要的,但是将int值作为参数。 .modPow方法将BigInteger作为参数,但我不希望答案与我正在尝试计算的值一致。

我的BigInteger指数太大而无法表示为int,有人可以建议一种解决此限制的方法吗?

你不应该尝试用另一个非常大的数字来计算极大数的幂。 结果数字会占用大量内存。 如果你计算a.pow(b)它将有大约log(a)*b位数。 如果b太大而不能拟合整数,那么对于甚至非常小的a值,结果将有数十亿个数字。

尝试重新思考您尝试实现的目标以及如何在不执行此操作的情况下实现目标。

实际的解决方案是将指数从BigInteger转换为int。

如果由于指数太大而无法执行此操作,则算法无法实现。 结果数字几乎肯定太大而无法表示为BigInteger。 (BigInteger使用一个字节数组来表示数字,并且无论堆有多大,Java数组的最大大小都是2**31 - 1元素。)即使你实现了一个“BiggerInteger”类,表示数字,您很快就会推动机器物理内存大小的限制。 (并且计算N.pow(M)所花费的时间将是…… NP-tricky … O((MlogN)^M)我认为)。

当然,如果你获得的数字是0-1 ,那么结果很容易适合BigInteger 。 但在这些情况下,有更好的方法来计算功率:-)。