Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Алгоритм Евклида для нахождения наибольшего общего делителя




Вычисление степени числа а по модулю 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, целесообразно использовать алгоритмы быстрого возведения в степень.

 

 

Целое число а делит без остатка другое целое число b, если и только если

b = k • a

 

для некоторого целого числа k. В этом случае а называют делителем числа b или множителем в разложении числа b на множители.

 

Пусть а – целое число, причем а > 1. Тогда а является простым числом, если его единственным положительным делителем будут 1 и само а. В противном случае а называется составным.

Любое целое n > 1 может быть представлено единственным образом с точностью до порядка сомножителей как произведение простых.

Существенный с точки зрения криптографии факт состоит в том, что не известно никакого эффективного алгоритма разложения чисел на множители. Не было получено и никакой нетривиальной нижней оценки временной сложности разложения. Никаких эффективных методов не известно даже в таком простом случае, когда необходимовосстановить два простых числа p и q из их произведения:

n = p • q.

 

Наибольший общий делитель чисел а и b, обозначаемый как
НОД (а, b) или просто (а, b), это наибольшее целое, делящее одновременно числа а и b.

В эквивалентной форме (а, b) – это то единственное натуральное число, которое делит а и b и делится на любое целое, делящее и а и b.

Если НОД (а, b) = 1, то целые а и b – взаимно простые.

Наибольший общий делитель может быть вычислен с помощью алгоритма Евклида. Евклид описал этот алгоритм в своей книге “Начала”, написанной около 300 лет до н.э. Он не изобрел его. Историки полагают, что этот алгоритм, возможно, старше еще на 200 лет. Это древнейший нетривиальный алгоритм, который просуществовал до настоящего времени и все еще хорош и сегодня.

Опишем алгоритм Евклида для нахождения НОД (а, b).

Введем обозначения: q i – частное, r i – остаток.

Тогда алгоритм можно представить в виде следующей цепочки равенств:

 

а = b • q 1 + r 1, 0 < r 1 < b,

b = r 1 • q 2 + r 2, 0 < r 2 < r 1,

r1 = r 2 • q 3 + r 3, 0 < r 3 < r 2,

……...

r k - 2 = r k - 1 • q k + r k, 0 < r k < r k - 1,

 

r k - 1 = r k • q k + 1.

 

Остановка гарантируется, поскольку остатки r i от делений образуют строго убывающую последовательность натуральных чисел. Из этой цепочки немедленно получаем, что r k есть общий делитель чисел а и b и, более того, что любой общий делитель чисел а и b делит и r k. Таким образом, r k = НОД (а, b) или r k = (а, b).

 




Поделиться с друзьями:


Дата добавления: 2015-08-31; Просмотров: 612; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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