Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы / Глава 3_Маш_ар-ка.doc
Скачиваний:
142
Добавлен:
15.02.2015
Размер:
1.68 Mб
Скачать

3.7. Алгоритм Евклида для больших чисел

Традиционный алгоритм. Алгоритм Евклида для отыскания наибольшего общего делителя двух натуральных чиселиявляется циклическим процессом последовательных делений с остатком по схеме:

1) ;

2) при .

При этом равно последнему ненулевому остатку(такой остаток обязательно найдётся, поскольку неотрицательные числастрого убывают).

Разностный алгоритм. Если , то, и процесс замены большего из аргументов их разностью можно продолжать вплоть до получения нуля: при этом. В этом случае не производится трудоёмкая операция деления с остатком, но число вычитаний может оказаться большим.

Бинарный алгоритм. Как отмечалось выше, операции умножения/деления на степень основания системы счисления (на в случае двоичного представления) сводится к быстрым аппаратно реализуемым операциям сдвига всех цифр влево/вправо и дописыванию нуля на освободившееся место (вспомните школьные правила умножения на десять, а также деления на десять для чисел, оканчивающихся на нули). Бинарный алгоритм опирается на следующие свойства натуральных чисел:

1) ;

2) ;

3) ;

4) .

Бинарный алгоритм на основании свойств 1) и 2) заменяет чётные аргументы их половинами, а в ситуации, когда оба нечётны, больший из них заменяется чётной разностью. При этом чётность числа устанавливается анализом младшей цифры двоичного или десятичного представления.

Теорема Ламе. Пусть — целые числа,,-е число Фибоначчи. Тогда приалгоритм Евклида содержит не болееитераций.

3.8. Алгоритмы разложения на простые множители

Как известно, натуральное число единственным образом раскладывается в произведение степеней простых чисел:

. (30)

Для разложения на простые множители (называемого факторизацией) не известны быстро работающие при больших алгоритмы. На этой трудности основан методRSA шифрования с открытым ключом, когда всем известно, что большое число (например, содержащее порядкадесятичных цифр), является произведением двух простых чисел, но отыскание последних для последующего взламывания шифра невозможно за приемлемое время при существующих вычислительных мощностях [11], [19].

Важную роль играет распределение простых чисел в натуральном ряду. Оно описывается функцией — количество простых чисел, не превосходящих. При большихзначениеприближённо равно, поскольку доказано предельное равенство:

.

На этом основании можно с некоторой условностью говорить, что вероятность извлечь наугад простое число из множества приближённо равна, а также что-е простое число приближённо равно (лежит вблизи числа).

3.8.1.Метод пробных делений

Поскольку содержит лишь конечное число простых множителей, разложение (30) можно получить, делямногократно на последовательные простые числа, не превосходящие его:

не делится на 2;

не делится на ;не делится на 5;;

значит, .

Наличие некоторых простых множителей (например, 2, 3, 5, 7, 11) может быть проверено с помощью признаков делимости. Для больших чисел такая проверка осуществляется быстрее, чем деление с остатком.

Этот метод крайне неэффективен, его реализация невозможна при больших . Для его использования нужна таблица простых чисел, либо процедура проверка простоты числа, которая также является весьма трудоёмкой. Если— наибольшее простое в разложении (30), то время реализации приближённо пропорционально.