java – 使用BigInteger类的负指数

我正在使用Java BigInteger类进行一些数学运算,但在我尝试使用负数作为指数时出错.我是否认为你可以重新安排:

b · φ(N)^−1 mod N

如:

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

如果不是,我怎样才能重新排列表达式,以免在我的Java代码中出现负指数错误?

解决方法:

必须使用修改的规则执行算术模型N.特别是反转必须以不同的方式计算.逆的基本公理成立:

x * x-1 = 1 mod N.

但是你不能通过计算1 / x作为浮点或十进制值来计算x-1 mod N.相反,您必须专门为此目的使用算法.通常使用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);
上一篇:在Javascript中将字符串转换为大整数?


下一篇:java实现连续数的公倍数