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

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

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

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

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

textual
Листинг программы
  1. long a = 1000;
  2. long b = 1000000000;
  3. //В начале C присваиваем 1.
  4. long C = 1;
  5. while (b > 1) {
  6.   if (b % 2 == 0) {
  7.     //Если степень четная, уменьшаем её в два раза
  8.     b /= 2;
  9.     //при этом возводим в квадрат основание, делим по модулю
  10.     a = (a*a) % t;
  11.   } else {
  12.     //иначе уменьшаем показатель на единицу
  13.     b -= 1;
  14.     //увеличиваем коэффициент перед степенью, делим по модулю
  15.     C = (C*a) % t;
  16.   }
  17. }
  18. //теперь показатель степени равен 1
  19. //значит можно найти по такой формуле
  20. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы