Остаток от деления большого числа - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Есть проблема при вычислении остатка от деления. Нужно вычислить a^b mod t При этом, например a=226 b=91 t=3827 Были поптытки вычислить сначала a^b, потом от результата mod t. Но a^b не влазит ни в один тип данных. Подскажите пожалуйста, как мне посчитать этот остаток.

Решение задачи: «Остаток от деления большого числа»

textual
Листинг программы
long a = 1000;
long b = 1000000000;
//В начале C присваиваем 1.
long C = 1;
while (b > 1) {
  if (b % 2 == 0) {
    //Если степень четная, уменьшаем её в два раза
    b /= 2;
    //при этом возводим в квадрат основание, делим по модулю
    a = (a*a) % t;
  } else {
    //иначе уменьшаем показатель на единицу
    b -= 1;
    //увеличиваем коэффициент перед степенью, делим по модулю
    C = (C*a) % t;
  }
}
//теперь показатель степени равен 1
//значит можно найти по такой формуле
cout << ((C*a) % t);

Объяснение кода листинга программы

  1. Переменная a инициализируется значением 1000.
  2. Переменная b инициализируется значением 1000000000.
  3. Переменная C инициализируется значением 1.
  4. Запускается цикл while, который будет выполняться до тех пор, пока b больше 1.
  5. В условии цикла проверяется, является ли b четным числом.
  6. Если b четное, то оно делится на 2, возводится в квадрат и результат делится по модулю на t. Значение, полученное по модулю, присваивается переменной a.
  7. Если b нечетное, то из него вычитается 1, коэффициент перед степенью увеличивается на 1 и результат делится по модулю на t. Значение, полученное по модулю, присваивается переменной C.
  8. По завершении цикла значение переменной C будет равно 1.
  9. Выводится значение переменной C с помощью функции cout. Результат будет равен (C*a)%t.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы