В 1970-е годы алгоритм факторизации методом непрерывных дробей стал лучшим средством разложения на простые множители с использованием формата многократной точности. Программа, написанная Моррисоном и Бриллхартом, на компьютере IBM 360/91 обрабатывала произвольные 25-значные числа за 30 секунд, а 40-значные числа — за 50 минут. В 1970 году с помощью именно этого алгоритма была произведена факторизация седьмого числа Ферма[4]:
Метод оставался популярным вплоть до начала 1980-х годов, когда появился метод квадратичного решета. После этого метод факторизации непрерывных дробей оказался неконкурентоспособным[6].
Отсюда видно, что . Значит, если последовательно перебирать квадраты целых чисел , начиная с ближайшего сверху к квадрата, то на некоторой итерации разность окажется равна квадрату некоторого числа . Найденная пара чисел позволит найти пару множителей числа : .
Таким образом, метод Ферма сводит задачу факторизации числа к поиску целых чисел, разность которых равна исходному числу . Метод Ферма быстро находит множители числа в том случае, когда его делители близки к , т.е. для максимально негладких чисел. Если же число является гладким, то метод Ферма может работать даже медленней метода пробных делений[2].
Крайчик предложил вместо пар чисел , удовлетворяющих соотношению, искать пары , удовлетворяющие сравнению, т.е. .
Если, при этом, , то мы получим лишь тривиальное решение. Однако, если , то из указанного сравнения получается , где . Отсюда тоже следует разложение: делится на , но не делится ни на , ни на , следовательно — нетривиальный делитель [2] (см. #обоснование1).
После нововведения Крайчика алгоритм нахождения делителей числа значительно изменялся: теперь по-прежнему нужно вычислять для разных , однако теперь не требуется «ждать» другой квадрат, а нужно пытаться его построить, перемножая полученные числа [2].
Действительно, рассмотрим последовательность чисел вида (очевидно, ). Тогда, если , т.е. , то отсюда следует, что [2]. Для того, чтобы определить, какие именно соотношения нужно перемножить, необходимо раскладывать числа на множители и перемножать соотношения так, чтобы в произведениях присутствовали простые множители в четных степенях, позволяющие получить сравнение [8].
Метод Крайчика сводит задачу разложения числа на множители к построению некоторого количества сравнений и разложению на множители чисел . Однако Крайчик не предъявил конкретный алгоритм поиска пар чисел и алгоритмический способ составления из найденных соотношений сравнения вида [8].
В 1931 году в работе[3] Лемер и Пауэрс предложили два варианта генерации указанных сравнений. Оба варианта основывались на соотношениях, возникающих при разложении квадратичных иррациональностей в непрерывные дроби, и обладали тем свойством, что величины не превосходили [9]. Последнее неравенство гарантирует, что числа будут маленькими, что облегчит разложение этих чисел на простые множители[2](см. #обоснование2).
При этом, оба варианта оказываются эквивалентными[3]: если один вариант алгоритма найдет решение, то и второй вариант также найдет решение.
Однако, у обоих вариантов алгоритма был недостаток — разложение квадратичной иррациональности в непрерывную дробь периодично (теорема Лагранжа). Поэтому количество соотношений, которые можно получить с помощью данного метода, ограниченно, и их может оказаться недостаточно для набора соотношений и построения сравнения . При этом, как показывают практические эксперименты, при больших значениях длина периода разложения в непрерывную дробь оказывается достаточно большой (порядка [10]) для составления требуемого числа сравнений. В результате при больших оба варианта алгоритма всегда находят разложение числа на множители[11].
Полученное равенство имеет вид , предложенный Крайчиком, и может быть применено для факторизации числа .
Вычисляя последовательно частные , будем получать выражения вида для различных . Раскладывая величины на простые множители и комбинируя полученные равенства, можно получить сравнения вида (см. #пример1).
Используя равенства или , получить множество сравнений вида и разложить числа на простые множители.
Выбрать те равенства , перемножение которых даст произведение четных степеней простых чисел, полученных в результате разложения чисел . Тем самым, мы получим соотношение вида .
Если , то вернуться на шаг 3. Если имеющегося числа соотношений недостаточно для генерации равенства , то необходимо продолжить разложение числа в непрерывную дробь и, затем, вернуться на шаг 2.
Лемер и Пауэрс в своей работе указали, как можно генерировать соотношения вида , однако они, также как и Крайчик, не дали алгоритмического способа составления из найденных соотношений сравнения . Эту проблему решил метод Моррисона и Бриллхарта.
Метод Моррисона и Бриллхарта
В начале 1970-х годов в статье[5] Майкл Моррисон и Джон Бриллхарт предложили свой алгоритм, являющийся модификацией второго варианта алгоритма Лемера и Пауэрса. В настоящее время под методом непрерывных дробей понимают именно алгоритм Моррисона и Бриллхарта.
Основное отличие реализованного Моррисоном и Бриллхартом алгоритма от первоначального варианта заключалось в введении процедуры алгоритмического построения сравнения по заданному множеству сравнений вида . Для реализации этой процедуры использовалось понятие «факторной базы»[11].
Базой факторизации (или факторной базой) натурального числа называется множество различных простых чисел , за возможным исключением , которое может быть равным . При этом число , для которого является произведением степеней чисел из множества , называется B-гладким числом. Пусть теперь — B-гладкие числа, — разложения их наименьшие по абсолютной величине вычетов по модулю . Положим
Подберем числа так, чтобы сумма векторов была равна нулю. Определим
,
где . Тогда .
Осталось добавить, что факторная база в алгоритме Моррисона и Бриллхарта состоит из тех простых чисел , по модулю которых является квадратичным вычетом[15].
Алгоритм
Алгоритм Моррисона и Бриллхарта выглядит следующим образом[16].
Вход. Составное число .
Выход. Нетривиальный делитель числа .
1. Построить базу разложения , где и — попарно различные простые числа, по модулю которых является квадратичным вычетом.
2. Берутся целые числа , являющиеся числителями подходящих дробей к обыкновенной непрерывной дроби, выражающей число . Из этих числителей выбираются чисел, для которых абсолютно наименьшие вычеты по модулю являются B-гладкими:
,
где . Также каждому числу сопоставляется вектор показателей .
В противном случае вернуться на шаг 3 и поменять множество . (Обычно есть несколько вариантов выбора множества для одной и той же факторной базы . Если все возможности исчерпаны, то следует увеличить размер факторной базы).
Из полученного алгоритма впоследствии был разработан алгоритм Диксона, из которого был удален аппарат цепных дробей[17]. После создания алгоритма Диксона, метод непрерывных дробей, по сути, представлял собой алгоритм Диксона, в котором был уточнен выбор абсолютно наименьшего вычета [18].
Некоторые улучшения
Пусть . Выше в непрерывную дробь раскладывалось число . Такой вариант эффективен, когда и близки друг к другу. Однако, чем больше разность между числами и , тем более трудоемким становится алгоритм. В этом случае вместо можно раскладывать в непрерывную дробь число , где маленький множитель подбирается так, чтобы в базу множителей вошли все малые простые[19].
Кроме того, так как метод непрерывных дробей построен по схеме алгоритма Диксона, то для него применимы дополнительные стратегии алгоритма Диксона.
Обоснование
Следующая лемма показывает, что если выполнено сравнение и , то числа и имеют общие делители.
Лемма(о факторизации)[20]. Пусть — нечётное составное число и — вычеты по модулю такие, что и . Тогда выполняется неравенство .
Следующие два утверждения — ключевые для алгоритма факторизации методом непрерывных дробей. Они показывают, что можно найти последовательность чисел , квадраты которых имеют малые вычеты по модулю .
Теорема[21]. Если , где , — подходящие дроби к числу , которое задано обыкновенной непрерывной дробью, то для всех справедлива оценка .
Следствие[21]. Пусть положительное число не является полным квадратом и , где , — подходящие дроби к числу . Тогда для абсолютно наименьшего вычета (т.е. для вычета, расположенного между и ) справедливо неравенство , причем .
Разложим на множители методом Морриса и Брилхарта число .
1. Строим базу разложения из маленьких простых чисел, выбирая числа, по модулю которых является квадратичным вычетом, что проверяется вычислением символов Лежандра:
Отсюда, факторная база будет равна , .
2. Ищем числители подходящих дробей к числу :
Выбираем те из них, для которых значения являются B-гладкими. Результаты вычислений записываем в таблицу:
Более точная оценка(которая при этом все равно оставалась эвристической) была проведена в работе[25]. Приведем результаты оценки сложности в соответствии с этой работой.
При получении оценок в этой работе делаются некоторые эвристические допущения. Например, предполагают, что если помощью алгоритма построено пар таких, что , то хотя бы для одной из них выполнены неравенства
.
Утверждение[26]. Если , и факторная база состоит из и всех простых чисел таких, что:
,
то при вычислении подходящих дробей, где , можно ожидать, что алгоритм разложит на два множителя с эвристической оценкой сложности арифметических операций.
Манин, Ю. И., Панчишкин, А. А.Глава 3.4. Метод непрерывных дробей (CFRAC) и вещественные квадратичные поля // Введение в теорию чисел, Теория чисел – 1. — Итоги науки и техн. Сер. Соврем. пробл. мат. Фундам. направления. — М.: ВИНИТИ, 1990. — Т. 49. — С. 77-80. — 341 с.