Pet*_*erW 21 java math biginteger pow
我正在玩Java中的数字,想看看我能做多少.我的理解是BigInteger可以容纳一些无限大小,只要我的计算机有足够的内存来容纳这样的数字,对吗?
我的问题是BigInteger.pow只接受一个int,而不是另一个BigInteger,这意味着我只能使用一个最多2,147,483,647的数字作为指数.是否可以使用BigInteger类?
BigInteger.pow(BigInteger)
Run Code Online (Sandbox Code Playgroud)
谢谢.
Kei*_*all 22
您可以使用重复的平方来编写自己的:
BigInteger pow(BigInteger base, BigInteger exponent) {
BigInteger result = BigInteger.ONE;
while (exponent.signum() > 0) {
if (exponent.testBit(0)) result = result.multiply(base);
base = base.multiply(base);
exponent = exponent.shiftRight(1);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
可能不适合负面基础或指数.
Rau*_*ene 11
您只能通过模块化算法在Java中执行此操作,这意味着您可以执行a ^ b mod c,其中a,b,c是BigInteger数字.
这是使用:
BigInteger modPow(BigInteger exponent, BigInteger m)
Run Code Online (Sandbox Code Playgroud)
BigInteger的底层实现仅限于(2 ^ 31-1)*32位值.这几乎是2 ^ 36位.您将需要8 GB的内存来存储它,很多时候,这对像的toString执行任何操作().
顺便说一句:你永远无法读到这样的数字.如果您试图将其打印出来,则需要一生的时间来阅读它.
java 不会让您执行 BigInteger.Pow(BigInteger) 但您可以将其放入循环中的最大整数,然后查看在何处抛出 ArithmeticException 或由于内存不足而引发的其他错误。