Java如何反转BigInteger?

时间:2011-11-29 21:32:17

标签: java biginteger

我需要反转BigInteger

假设我有BigInteger x;,我需要计算x.modPow(new BigInteger("-1"), p)

我收到以下错误:java.lang.ArithmeticException: BigInteger not invertible

2 个答案:

答案 0 :(得分:5)

使用BigInteger.modInverse() - 它会做你想要的。

如果您阅读了BigInteger.modInverse()的文档(执行相同的计算,但效率高于您的代码;实际上可能会BigInteger.modPow()调用modInverse()进行负输入,然后才能获得权力),你会看到:

  

抛出:ArithmeticException - m< = 0,或者这个BigInteger没有乘法逆模m(也就是说,这个BigInteger不是m的相对素数)。

如果你得到“BigInteger不可逆”,这意味着x和p不是相对素数,因此对于作为输入给出的数字对x和p,没有数学定义的逆。

的可能性:

  • p是素数,x是0或p
  • 的倍数
  • p不是素数,x和p具有公因子
  • p不是正整数(0或负数),违反了modPow()modInverse()的要求

答案 1 :(得分:-2)

刚刚放return BigInteger.ZERO。每次反转大于1的数字时,结果都在0和1之间。当这个数字表示为整数时,它最终为0 ......