Используйте BigInteger.modInverse()
- он будет делать то, что вы хотите.
Если вы читаете документы для BigInteger.modInverse()
(который выполняет идентичные вычисления, но более эффективно, чем ваш кодна самом деле предположительно BigInteger.modPow()
вызывает modInverse()
для отрицательных входов перед повышением до мощности), вы увидите:
Броски: ArithmeticException - m <= 0, или этот BigInteger не имеет мультипликативобратный мод m (то есть этот BigInteger не является относительно простым для m). </p>
Если вы получаете «BigInteger необратимый», это означает, что x и p не являются относительно простыми, поэтомунет математически определенного обратного для пары чисел x и p, заданной в качестве входных данных.
Возможности:
- p простое, а x равно 0 или кратно p
- p не простое число, а x и p имеют общий множитель
- p не является положительным целым числом (0 или отрицательным), что нарушает требования
modPow()
и modInverse()