BigInteger.pow(BigInteger)?

2022-09-01 14:08:12

我正在用Java玩数字,并想看看我能做一个多大的数字。我的理解是,BigInteger可以容纳无限大小的数量,只要我的电脑有足够的内存来容纳这样的数字,对吗?

我的问题是BigInteger.pow只接受一个int,不接受另一个BigInteger,这意味着我只能使用一个最多2,147,483,647的数字作为指数。是否可以将 BigInteger 类用作此类?

BigInteger.pow(BigInteger)

谢谢。


答案 1

您可以使用重复平方编写自己的内容:

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;
}

可能不适用于负基数或指数。


答案 2

你只能在Java中通过模算术做到这一点,这意味着你可以做一个a^b mod c,其中a,b,c是数字。BigInteger

这是通过以下方式完成的:

 BigInteger modPow(BigInteger exponent, BigInteger m) 

在此处阅读 BigInteger.modPow 文档。