Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Модулярная арифметика

ЭЛЕМЕНТЫ ТЕОРИИ ЧИСЕЛ

Модулярная арифметика часто называется “арифметикой часов”. Если прибавить 14 часов к 3 часам после полудня, то получится 5 часов утра следующего дня:

3 + 14 º 5 (mod 12)

или

(3 + 14) mod 12 = 5.

Это арифметика по модулю 12.

Обычная запись в модулярной арифметике

a º b (mod n)

читается так: “ a сравнимо с b по модулю n ”.

Это соотношение справедливо для целых значений a, b и n ¹ 0, если и только если

а = b + k • n

для некоторого целого k.

Отсюда, в частности, следует n | (a ─ b). Это читается как “ n делит (ab)”.

Если a º b (mod n), то b называют вычетом числа a по модулю n.

Операцию нахождения вычета числа а по модулю n

a (mod n)

называют приведением числа а по модулю n или приведением по модулю.

В нашем примере

(3 + 14) mod 12 = 17 mod 12 = 5

или

17 º 5 (mod 12),

число 5 является вычетом числа 17 по модулю 12.

Набор целых чисел от 0 до (n – 1) называют полным набором вычетов по модулю n.

Это означает, что для любого целого а (а > 0) его вычет r по модулю n есть некоторое целое число в интервале от 0 до (n – 1), определяемое из соотношения

r = a – k • n,

где k – целое число.

Например, для n = 12 полный набор вычетов:

{0, 1, 2, …, 11}.

Обычно используют вычеты

r Î {0, 1, 2, …, n – 1},

но иногда полезны вычеты в диапазоне целых:

r Î {– ½ (n – 1), …, ½ (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

а х mod n

можно выполнить как ряд умножений и делений. Существует способ сделать это быстрее. Поскольку эти операции дистрибутивны, быстрее произвести возведение в степень как ряд последовательных умножений, выполняя каждый раз приведение по модулю. Это особенно заметно, если работать с длинными числами (200 бит и более).

{ Пример. Нужно вычислить а 8 mod n.

Не следует применять примитивный подход с выполнением семи перемножений и одного приведения по модулю громадного числа:

(а • а • а • а • а • а • а • а) mod n.

Вместо этого выполняют три малых умножения и три малых приведения по модулю:

((а 2 mod n.)2 mod n.)2 mod n.

Тем же способом вычисляют

а 16 mod n. = (((а 2 mod n.)2 mod n.)2 mod n.)2 mod n. }

Вычисление

а х mod n,

 

где х не является срепенью 2, лишь немного сложнее. Двоичная запись числа х позволяет представить число х как сумму степеней 2:

х = 12 (10) = 11001 (2).

Поэтому 25 = 2 4 + 2 3 + 2 0.

Тогда

а 25 mod n. = (а • а 24) mod n. = (а • а 8 • а 16) mod n =

= (а • ((а 2) 2) 2 • (((а 2) 2) 2 ) 2) mod n = ((((а 2 • а) 2) 2 ) 2 • а) mod n.

При накоплении промежуточных результатов потребуется только шесть умножений:

(((((((а 2 mod n) • а) mod n)2 mod n)2 mod n)2 mod n) • а) mod n.

Этот метод уменьшает трудоемкость вычислений до 1,5хk операций в стреднем, где k – длина числа в битах.

Поскольку многие алгоритмы шифрования основаны на возведении в степень по модулю n, целесообразно использовать алгоритмы быстрого возведения в степень.

<== предыдущая лекция | следующая лекция ==>
Алгоритм Краскала | Вычисление обратных величин
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 536; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.