Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Нахождение обратных чисел в модульной арифметике (по сложению и умножению)
Модулярная арифметика Модулярная арифметика часто изучается в школе как "арифметика часов". Если отсчитать 14 часов от 3 часов после полудня, то получится 5 часов утра следующего дня: 3 + 14 = 5 (mod12) или (3+14) mod 12 = 5 Это арифметика по модулю 12. Обычная запись в модулярной арифметике a º b(mod n) читается так: "а сравнимо с b по модулю n". Это соотношение справедливо для целых значений а, b и n ¹ 0, если, и только если a = b + k * n для некоторого целого k. Отсюда, в частности, следует n |(a – b) Это читается как "n делит (а - b)".Если a º b(mod n) то b называют вычетом числа а по модулю n. Операцию нахождения вычета числа а по модулю n a(mod n) называют приведением числа а по модулю n или приведением по модулю. В нашем примере (3+ 14) mod 12 = 17 mod 12 = 5 или 17 º 5 (mod 12), число 5 является вычетом числа 17 по модулю 12. Набор целых чисел от 0 до (n-1) называют полным набором вычетов по модулю п. Это означает, что для любого целого а(а>0) его вычет г по модулю n есть некоторое целое число в интервале от 0 до (n-1), определяемое из соотношения r = a – k * n, где k-целое число. Например, для n =12 полный набор вычетов: {0,1,2, …,11} Обычно предпочитают использовать вычеты r Î {0,1,2,…,n-1} но иногда полезны вычеты в диапазоне целых:
Заметим, что -12(mod 7) º -5(mod 7) º 2(mod 7) º 9(mod 7) и т.д. Модулярная арифметика аналогична во многом обычной арифметике: она коммутативна, ассоциативна и дистрибутивна. Точнее говоря, целые числа по модулю n с использованием операций сложения и умножения образуют коммутативное кольцо при соблюдении законов ассоциативности, коммутативности и дистрибутивности. Фактически мы можем либо сначала приводить по модулю n, а затем выполнять операции, либо сначала выполнять операции, а затем приводить по модулю n, поскольку приведение по модулю n является гомоморфным отображением из кольца целых в кольцо целых по модулю n: (a + b) mod n = [a(mod n) + b(mod n)] mod n, (a - b) mod n = [a(mod n) - b(mod n)] mod n, (a * b) mod n = [a(mod n) * b(mod n)] mod n, [a * (b + c)] mod n = {[a * b(mod n)] + [a * c(mod n)]} mod n. Криптография использует множество вычислений по модулю n, потому что задачи типа вычисления дискретных логарифмов и квадратных корней очень трудны. Кроме того, с вычислениями по модулю удобнее работать, потому что они ограничивают диапазон всех промежуточных величин и результата.
Для модуля n длиной k бит промежуточные результаты любого сложения, вычитания или умножения будут не длиннее 2k бит. Поэтому возведение в степень в модулярной арифметике можно выполнить без генерации очень больших промежуточных результатов. Вычисление степени числа а по модулю n ax mod n можно выполнить как ряд умножений и делений. Существуют способы сделать это быстрее. Поскольку эти операции дистрибутивны, быстрее произвести возведение в степень как ряд последовательных умножений, выполняя каждый раз приведение по модулю. Это особенно заметно, если работать с длинными числами (200 бит и более). Например, если нужно вычислить a8 mod n, не следует применять примитивный подход с выполнением семи перемножений и одного приведения по модулю громадного числа: (a * a * a * a * a * a * a * a) mod n Вместо этого выполняют три малых умножения и три малых приведения по модулю: ((a2 mod n)2 mod n)2 mod n. Тем же способом вычисляют a16 mod n = (((a2 mod n)2 mod n)2mod n)2 mod n.
Вычисление ax mod n. где х не является степенью 2, лишь немного сложнее. Двоичная запись числа х позволяет представить число х как сумму степеней 2: x = 25(10) ® 1 1 0 0 1(2), поэтому 25 = 24+ 23 + 20 Тогда a25 mod n = (a * a24) mod n = (a * a8 * a16) mod n = a * ((a2)2)2 * (((a2)2)2)2 mod n = ((((a2 * a)2)2)2 * a) mod n. При разумном накоплении промежуточных результатов потребуется только шесть умножений: (((((((a2 mod n) * a) mod n)2 mod n)2 mod n)2 mod n) * a) mod n Этот метод уменьшает трудоемкость вычислений до 1,5xk операций в среднем, где k-длина числа в битах [123]. Поскольку многие алгоритмы шифрования основаны на возведении в степень по модулю n, целесообразно использовать алгоритмы быстрого возведения в степень.
|
|||||
Последнее изменение этой страницы: 2017-01-24; просмотров: 945; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.12.71.237 (0.005 с.) |