Учитывая нечетное long x
, я ищу long y
такое, что их произведение по модулю2**64
(то есть, используя нормальную арифметику с переполнением ), равно 1. Чтобы было ясно, что я имею в виду :Это можно вычислить за несколько тысяч лет таким образом:
for (long y=1; ; y+=2) {
if (x*y == 1) return y;
}
Я знаю, что это можно быстро решить с помощью расширенного алгоритма Евклида, но для этого требуется способность представлять все задействованные числа (в диапазоне до 2**64
, так что даже беззнаковая арифметика не поможет ). Использование BigInteger
, безусловно, помогло бы, но мне интересно, есть ли более простой способ, возможно, с использованием расширенного алгоритма Евклида, реализованного для положительных длинных чисел.