Модульное возведение в степень с двоичным представлением экспоненты

Итак, у меня есть задание вычислить двоичное представление целого числа, а затем преобразовать его в нотацию справа налево, поместить его в вектор и выполнить для него модульное возведение в степень. У меня есть двоичное представление, но я получаю неправильный ответ, когда дело доходит до части модульного возведения в степень. Это может быть что-то глупое, что я пропустил в коде, но я просмотрел примеры и не могу понять, в чем может быть проблема. Вот код модульного возведения в степень здесь.

int ModularExpo(int a, vector<int> K, int n) {
    if (n == 1) {
        return 0;
    }
    int b = 1;
    int A = a;
    if (K[0] == 1) {
        b = a;
    }
    for (unsigned int i = 1; i < K.size() - 1; i++) {
        A = A * A % n;
        if (K[i] == 1) {
            b = A * b % n;
        }
    }
    return b;
}

Итак, в основном я отправляю базу (a), показатель степени в двоичной форме в виде обратного вектора (K) и модуль (n). Инициализируйте 2 переменные b и A, затем проверьте первый индекс, чтобы увидеть, является ли K четным или нечетным, а затем войдите в мой цикл, суммируя все. Все еще не могу понять.

Любая помощь приветствуется, спасибо.


person kbman99    schedule 05.07.2016    source источник


Ответы (1)


Хорошо, я действительно понял это. Я не зацикливался на векторе, потому что использовал

i < K.size() - 1

когда я должен был использовать либо

i < K.size()

or

i <= K.size() - 1

в моем цикле for.

person kbman99    schedule 05.07.2016
comment
идите с i < K.size() меньшим количеством закулисной математики, предполагая, что компилятор не распознает -1 и <= и разделяет их до i < K.size(). - person user4581301; 05.07.2016