使用BigInteger类的负指数

时间:2018-12-01 14:32:55

标签: java biginteger

我正在使用Java BigInteger类进行一些数学运算,但是当我尝试使用负数作为指数时遇到错误。我认为您可以重新排列是正确的吗?

b · φ(N)^−1 mod N

为:

      b
------------
φ(N)^1 mod N

如果没有,我该如何重新排列表达式以免在Java代码中出现负指数错误?

2 个答案:

答案 0 :(得分:3)

BigInteger不能有负指数,因为那会使它成为分数(不是1就是整数)。

尝试改用BigDecimal

对于表达式的重新排列,应​​该这样重新排列:

      b
------------  mod N
   φ(N)^1

答案 1 :(得分:3)

算术mod N必须以修改后的规则执行。特别是,逆的计算必须大不相同。逆的基本公理成立:

  

x * x -1 = 1 mod N。

但是您不能通过将1 / x计算为浮点或十进制值来计算x -1 modN。相反,您必须为此专门使用一种算法。通常使用extended euclidean algorithm的变体。

为方便起见,Java的BigInteger类已经为您提供了以下算法:modInverse()。因此您的计算应类似于:

BigInteger phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
BigInteger phiInverse = phi.modInverse(N);
BigInteger result = b.multiply(phiInverse).mod(N);