Расширенный алгоритм Евклида

104
08 октября 2021, 07:20

Доброго времени суток.

Задача: реализовать функцию находящую число X обратное к числу A по модулю N (т.е. (X*A)%N==1). При этом числа A и N - известны.

Как я пытался решить задачу: на сколько мне известно, данная задача хорошо решается через расширенный алгоритм Евклида. Поэтому я реализовал следующую функцию:

private Triple getExtendGCD(long a, long n) {
    long s1 = 1, s2 = 0;
    long t1 = 0, t2 = 1;
    while(n != 0) {
        long quotient = a / n;
        long r = a % n;
        a = n;
        n = r;
        long tempS = s1 - s2 * quotient;
        s1 = s2;
        s2 = tempS;
        long tempR = t1 - t2 * quotient;
        t1 = t2;
        t2 = tempR;
    }
    return new Triple(a, s1, t1);
}
private final class Triple {
    final long GCD, A, B;
    private Triple(long gcd, long a, long b) {
        GCD = gcd;
        A = a;
        B = b;
    }
}

Но, она выдает не верный ответ на следующих тестовых наборах: A = 2, N = 31 (выдает -15, а ожидается 16); A = 2, N = 101 (выдает -50, а ожидается 51).

Вопрос: подскажите пожалуйста, где в реализации ошибка.

Answer 1

Как и написали в комментарии под вопросом: в случае, если A < 0 необходимо к нему прибавить число кратное N, таким образом, чтобы результат находился в промежутке [0; N).

READ ALSO
Data Jpa - операции с двумя аргументами

Data Jpa - операции с двумя аргументами

Приложение на Spring Data JpaИмеется класс Meal

98
Ping-Pong на Java

Ping-Pong на Java

Доброго времени сутокПример из книги, символ в символ, но не работает, шарик не перемещается

78
Получение ANDROID_ID на всех версиях Android

Получение ANDROID_ID на всех версиях Android

Подскажите пожалуйста как в Android на всех версиях получать ANDROID_ID, чтобы для конкретного устройства он некогда не менялсяИ на другом устройстве...

110
Spring: как получить в Java-классе информацию о WildFly?

Spring: как получить в Java-классе информацию о WildFly?

Возникла необходимость получить в Java-классе информацию об инстансе WildFly, на котором развернуто приложение (в идеале - имя сервера, либо любую...

84