我需要反转BigInteger
。
假设我有BigInteger x;
,我需要计算x.modPow(new BigInteger("-1"), p)
。
我收到以下错误:java.lang.ArithmeticException: BigInteger not invertible
。
答案 0 :(得分:5)
使用 BigInteger.modInverse()
- 它会做你想要的。
如果您阅读了BigInteger.modInverse()
的文档(执行相同的计算,但效率高于您的代码;实际上可能会BigInteger.modPow()
调用modInverse()
进行负输入,然后才能获得权力),你会看到:
抛出:ArithmeticException - m< = 0,或者这个BigInteger没有乘法逆模m(也就是说,这个BigInteger不是m的相对素数)。
如果你得到“BigInteger不可逆”,这意味着x和p不是相对素数,因此对于作为输入给出的数字对x和p,没有数学定义的逆。
的可能性:
modPow()
和modInverse()
的要求答案 1 :(得分:-2)
刚刚放return BigInteger.ZERO
。每次反转大于1的数字时,结果都在0和1之间。当这个数字表示为整数时,它最终为0 ......