2016-07-05 14 views
0

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

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) и модуля (п). Инициализируйте 2 переменные b и A, затем проверьте первый индекс, чтобы увидеть, является ли K четным или нечетным, а затем перейдите в мой цикл, суммируя все. Все еще не могу понять.

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

ответ

0

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

i < K.size() - 1 

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

i < K.size() 

или

i <= K.size() - 1 

в моем цикле.

+0

перейти с 'i user4581301

 Смежные вопросы

  • Нет связанных вопросов^_^