Итак, у меня есть задание для вычисления двоичного представления целого числа, а затем обратного преобразования в нотацию справа налево, помещения в вектор и выполнения модульного возведения в степень. У меня нет двоичного представления, но я получаю неправильный ответ, когда дело доходит до модульной части возведения в степень. Это может быть что-то глупое, что я пропустил в коде, но я посмотрел на примеры и не могу понять, в чем может быть проблема. Вот код для модульного возведения в степень здесь.
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;
}
Поэтому в основном я посылаю в базу (а) показатель степени в двоичном виде в виде вектора с обратным вектором (K) и модуля (n). Инициализируйте 2 переменные b и A, затем проверьте первый индекс, чтобы увидеть, является ли K четным или нечетным, затем перейдите к моему циклу, суммируя все. Все еще не могу понять это.
Любая помощь приветствуется, спасибо.
Хорошо, я на самом деле понял это. Я не проходил весь цикл через вектор, потому что использовал
i < K.size() - 1
когда я должен был использовать либо
i < K.size()
или же
i <= K.size() - 1
по моему за цикл.
Других решений пока нет …