Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 1063; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.198 (0.005 с.) |