деление по модулю a mod n
.docделение по модулю a mod n
Результатом этой операции является остаток от целочисленного деления, например, если мы делим 11 на 3, то целых частей у нас получается 3, (так как 3*3=9), в остатке будет 2, это число и будет результатом деления по модулю:
11/3 = 3 целых и 2 в остатке. Т.е. 11 mod 3 = 2 (11-3*3=2)
Напоминание:
В языке Си операция взятия вычета по модулю обозначается % - деление по модулю.
11%3 = 2 (остаток)
умножение по модулю (a*b) mod n
Положим, что нам требуется выполнить умножение следующего вида: res = (a*b) mod n, где 0 <= a < p; 0 <= b < p; n– простое число.
mod n – операция нахождения остатка от деления по модулю или деления по модулю.
Если выполнять операции «в лоб», то нужно умножить a на b , потом разделить на n и взять остаток. Этот подход имеет право на существование, но чрезвычайно затратен по количеству операций и довольно сложен для реализации.
возведение в степень по модулю (a ^ k) mod n
Пусть у нас есть некоторое число a, которое требуется возвести в степень k по модулю n. Можно просто умножить a само на себя k раз, затем разделить на n и взять остаток. Но при больших размерах чисел это довольно сложная и медленная операция.
(mod 511) = 28153056843 (mod 511) = 359,
Быстрое возведение в степень
Идея в том, чтобы представить возведение в степень в виде возведений в квадрат и умножений на основание.
Например Операцию приведения по модулю надо выполнять после каждой промежуточной операции, чтобы не возникало переполнения.
В данный момент модулярная арифметика применяется в следующих областях: цифровая обработка сигналов, криптография, обработка изображений/аудио/видео и.т.д.
Модулярные алгоритмы возведения в степень
http://masteroid.ru/articles/view/1330/
Сравнения и классы вычетов из «Кванта»
http://kvant.mccme.ru/1978/10/sravneniya_i_klassy_vychetov.htm