Вам нужен Расширенный евклидов алгоритм . Это дает вам R и S такие, что
gcd(A,2^N-1) = R * A + S * (2^N-1).
Если gcd равен 1, то R является мультипликативной обратной величиной A. Тогда обратная функция равна
g(A,y) = R*y mod (2^N-1).
Хорошо, вот обновление для случая, когда G = Gcd (A, 2 ^ N-1) не равно 1. В этом случае
R*y mod (2^N-1) = R*A*x mod (2^N-1) = G*x mod (2^N-1).
Если y был вычислен функцией f, то y делится на G. Следовательно, мы можем разделить приведенное выше уравнение на G и получить уравнение по модулю (2 ^ N-1) / G. Таким образом, набор решений
x = R*y/G + k*(2^N-1)/G, where k is an arbitrary integer.