Факторизация методом непрерывных дробей

Материал из testwiki
Перейти к навигации Перейти к поиску

В теории чисел факторизация методом непрерывных дробей (CFRAC) — это алгоритм разложения целых чисел на простые множители. Это алгоритм общего вида, пригодный для факторизации произвольного целого m.

Метод непрерывных дробей разработан на основе алгоритма Крайчика и использует непрерывную дробь, сходящуюся к km для некоторого целого положительного числа k. На основе метода непрерывных дробей был построен алгоритм Диксона, по схеме которого, затем, был разработан метод квадратичного решетаШаблон:Sfn.

Алгоритм имеет сложность O(e2logmloglogm)=Lm[12,2], в O и L нотацияхШаблон:Sfn.

История

Метод непрерывных дробей был предложен Д. Г. Лемером и Шаблон:Нп4 в 1931 годуШаблон:Sfn. Этот метод основывался на идеях Лежандра и Шаблон:Нп4 и предназначался для разложения больших чисел, содержащих 30 и более десятичных разрядов. Однако, полученный метод не применялся из-за трудностей, связанных с его реализацией на настольных арифмометрахШаблон:Sfn.

В конце 1960-х годов Шаблон:Нп4 обнаружил, что этот метод хорошо подходит для компьютерного программирования, и совместно с Михаэлем А. Моррисоном, переработал этот алгоритм для ЭВМ в 1975 годуШаблон:Sfn.

В 1970-е годы алгоритм факторизации методом непрерывных дробей стал лучшим средством разложения на простые множители с использованием формата многократной точности. Программа, написанная Моррисоном и Бриллхартом, на компьютере IBM 360/91 обрабатывала произвольные 25-значные числа за 30 секунд, а 40-значные числа — за 50 минут. В 1970 году с помощью именно этого алгоритма была произведена факторизация седьмого числа ФермаШаблон:Sfn:

227+1=596495891274972175704689200685129054721.

Метод оставался популярным вплоть до начала 1980-х годов, когда появился метод квадратичного решета. После этого метод факторизации непрерывных дробей оказался неконкурентоспособнымШаблон:Sfn.

Описание алгоритма

Метод Лемера и Пауэрса

В 1643 году Пьер Ферма предложил алгоритм разложения на множители нечетного целого числа m. Кратко этот алгоритм можно описать так: пусть m=ab. Тогда, можно записать

ab=(a+b2)2(ab2)2=x2y2=m,

где x=a+b2,y=ab2.

Отсюда видно, что x2m=y2. Значит, если последовательно перебирать квадраты целых чисел x, начиная с ближайшего сверху к m квадрата, то на некоторой итерации разность x2m окажется равна квадрату некоторого числа y. Найденная пара чисел (x,y) позволит найти пару множителей (a,b) числа m: a=x+y2,b=xy2.

Таким образом, метод Ферма сводит задачу факторизации числа к поиску целых чисел, разность которых равна исходному числу m. Метод Ферма быстро находит множители числа m в том случае, когда его делители близки к m, т.е. для максимально негладких чисел. Если же число m является гладким, то метод Ферма может работать даже медленней метода пробных деленийШаблон:Sfn.

В 1926 году Шаблон:Нп4 в монографии[1] представил свой метод факторизации целых чисел, который представлял собой «усиление» метода Ферма.

Крайчик предложил вместо пар чисел (x,y), удовлетворяющих соотношению x2y2=m, искать пары (x,y), удовлетворяющие сравнению x2y20(modm), т.е. x2y2(modm). Если, при этом, x±y(modm), то мы получим лишь тривиальное решение. Однако, если x≢±y(modm), то из указанного сравнения получается x2y2=(xy)(x+y)=km, где k. Отсюда тоже следует разложение: m делится на (xy)(x+y), но не делится ни на xy, ни на x+y, следовательно gcd(xy,m) — нетривиальный делитель mШаблон:Sfn (см. #обоснование1).

После нововведения Крайчика алгоритм нахождения делителей числа m значительно изменялся: теперь по-прежнему нужно вычислять x2m для разных x, однако теперь не требуется «ждать» другой квадрат, а нужно пытаться его построить, перемножая полученные числа mШаблон:Sfn.

Действительно, рассмотрим последовательность чисел вида υ(u)=u2m (очевидно, υu2(modm)). Тогда, если υ(u1)υ(u2)υ(uk)=y2, т.е. (u12m)(u22m)(uk2m)=y2, то отсюда следует, что x2=u12u22uk2y2(modm)Шаблон:Sfn. Для того, чтобы определить, какие именно соотношения нужно перемножить, необходимо раскладывать числа υ на множители и перемножать соотношения так, чтобы в произведениях υ1υ2υk присутствовали простые множители в четных степенях, позволяющие получить сравнение x2y2(modm)Шаблон:Sfn.

Метод Крайчика сводит задачу разложения числа m на множители к построению некоторого количества сравнений u2υ(modm) и разложению на множители чисел υ. Однако Крайчик не предъявил конкретный алгоритм поиска пар чисел u,υ и алгоритмический способ составления из найденных соотношений сравнения вида x2y2(modm)Шаблон:Sfn.

В 1931 году в работеШаблон:Sfn Лемер и Пауэрс предложили два варианта генерации указанных сравнений. Оба варианта основывались на соотношениях, возникающих при разложении квадратичных иррациональностей в непрерывные дроби, и обладали тем свойством, что величины υ не превосходили 2m Шаблон:Sfn. Последнее неравенство гарантирует, что числа υ будут маленькими, что облегчит разложение этих чисел на простые множителиШаблон:Sfn(см. #обоснование2).

При этом, оба варианта оказываются эквивалентнымиШаблон:Sfn: если один вариант алгоритма найдет решение, то и второй вариант также найдет решение.

Однако, у обоих вариантов алгоритма был недостаток — разложение квадратичной иррациональности в непрерывную дробь периодично (теорема Лагранжа). Поэтому количество соотношений, которые можно получить с помощью данного метода, ограниченно, и их может оказаться недостаточно для набора соотношений и построения сравнения x2y2(modm). При этом, как показывают практические эксперименты, при больших значениях m длина периода разложения в непрерывную дробь оказывается достаточно большой (порядка m Шаблон:Sfn) для составления требуемого числа сравнений. В результате при больших m оба варианта алгоритма всегда находят разложение числа m на множителиШаблон:Sfn.

Первый вариант

Напомним, что каждому действительному числу ξ может быть поставлена в соответствие последовательность целых чисел [b0,b1,b2,...], называемая его непрерывной дробью. Это сопоставление строится следующим образом

x0=ξ,bi=[xi],xi+1=1xibi,i=0,1,2,.

При этом ξ=b0+1b1+1b2+1+1xn=[b0,b1,b2,,bn1,xn].

Если раскладывать в непрерывную дробь число ξ=m, то возникающие в процессе разложения числа xn имеют вид xn=m+AnBn с целыми An,Bn, причем выполняется An<m, 0<Bn<2mШаблон:Sfn.

Для коэффициентов An,Bn выполняется равенствоШаблон:Sfn:

An2+BnBn1=m.

Отсюда следует

BnBn1An2(modm),n=0,1, .(1)

Полученное равенство имеет вид u2υ(modm), предложенный Крайчиком, и может быть применено для факторизации числа m.

Вычисляя последовательно частные A0,B0,A1,B1,, будем получать выражения вида (1) для различных n. Раскладывая величины Bn на простые множители и комбинируя полученные равенства, можно получить сравнения вида x2y2(modm) (см. #пример1).

Второй вариант

С каждой непрерывной дробью свяжем последовательность рациональных чисел, состоящую из подходящих дробей PnQn=[b0,b1,,bn1,bn],n>0, вычисляемых по формуламШаблон:Sfn:

Pn+1=bn+1Pn+Pn1,Qn+1=bn+1Qn+Qn1,n0,
P0=b0,Q0=P1=1,Q1=0

и стремящихся к разлагаемому числу. Если в непрерывную дробь разлагается число ξ=m, то справедливо соотношениеШаблон:Sfn:

Pn12mQn1=(1)nBn ,

из которого следует

Pn12(1)nBn(modm),n=1,2, .(2)

Полученное равенство имеет вид u2υ(modm) и может быть использовано для факторизации числа m так же, как и в первом варианте.

Алгоритм

Таким образом, исправленный Лемером и Пауэрсом метод Крайчика имеет следующий видШаблон:Sfn.

Вход. Составное число m.

Выход. Нетривиальный делитель p числа m.

  1. Разложить m в непрерывную дробь.
  2. Используя равенства (1) или (2), получить множество сравнений вида u2υ(modm) и разложить числа υ на простые множители.
  3. Выбрать те равенства u2υ(modm), перемножение которых даст произведение четных степеней простых чисел, полученных в результате разложения чисел υ. Тем самым, мы получим соотношение вида x2y2(modm).
  4. Если x±y(modm), то вернуться на шаг 3. Если имеющегося числа соотношений недостаточно для генерации равенства x2y2(modm), то необходимо продолжить разложение числа m в непрерывную дробь и, затем, вернуться на шаг 2.
  5. С помощью алгоритма Евклида определить p=gcd(xy,m).

Лемер и Пауэрс в своей работе указали, как можно генерировать соотношения вида u2υ(modm), однако они, также как и Крайчик, не дали алгоритмического способа составления из найденных соотношений сравнения x2y2(modm). Эту проблему решил метод Моррисона и Бриллхарта.

Метод Моррисона и Бриллхарта

В начале 1970-х годов в статьеШаблон:Sfn Майкл Моррисон и Джон Бриллхарт предложили свой алгоритм, являющийся модификацией второго варианта алгоритма Лемера и Пауэрса. В настоящее время под методом непрерывных дробей понимают именно алгоритм Моррисона и Бриллхарта.

Основное отличие реализованного Моррисоном и Бриллхартом алгоритма от первоначального варианта заключалось в введении процедуры алгоритмического построения сравнения x2y2(modm) по заданному множеству сравнений вида u2υ(modm). Для реализации этой процедуры использовалось понятие «факторной базы»Шаблон:Sfn.

Будем искать x как произведение таких чисел ui, что наименьший по абсолютной величине вычет числа ui2 по модулю m является произведением простых чиселШаблон:Sfn. Тогда из тех же простых чисел можно построить и y.

Базой факторизации (или факторной базой) натурального числа m называется множество B={p0,p1,,ph} различных простых чисел pi, за возможным исключением p0, которое может быть равным 1. При этом число b, для которого b2modm является произведением степеней чисел из множества B, называется B-гладким числом. Пусть теперь ui — B-гладкие числа, υi=ui2modm=j=0hpjαij — разложения их наименьшие по абсолютной величине вычетов по модулю m. Положим

𝐞i=(ei0,ei1,,eih)𝔽2h,

где eijαijmod2, 𝔽2hвекторное пространство над полем GF(2), которое состоит из наборов нулей и единиц размерности h.

Подберем числа ui так, чтобы сумма векторов 𝐞i была равна нулю. Определим

x=(iui)modm,y=j=0hpjγj,

где γj=12iαij. Тогда x2y2(modm).

Осталось добавить, что факторная база в алгоритме Моррисона и Бриллхарта состоит из тех простых чисел pi, по модулю которых m является квадратичным вычетомШаблон:Sfn.

Алгоритм

Алгоритм Моррисона и Бриллхарта выглядит следующим образомШаблон:Sfn.

Вход. Составное число m.

Выход. Нетривиальный делитель p числа m.

1. Построить базу разложения B={p0,p1,,ph}, где p0=1 и p1,,ph — попарно различные простые числа, по модулю которых m является квадратичным вычетом.

2. Берутся целые числа ui, являющиеся числителями подходящих дробей к обыкновенной непрерывной дроби, выражающей число m. Из этих числителей выбираются h+2 чисел, для которых абсолютно наименьшие вычеты ui2 по модулю m являются B-гладкими:

ui2modm=j=0hpjαij=υi,

где αij0. Также каждому числу ui сопоставляется вектор показателей (αi0,αi1,,αih).

3. Найти (например, методом Гаусса) такое непустое множество K{1,2,,h+1}, что iK𝐞i=0, где — операция исключающее ИЛИ, 𝐞i=(ei1,ei2,,eih),eijαij(mod2), 0jh.

4. Положить xiKuimodm,yj=1hpj12iKαijmodm. Тогда x2y2(modm).

5. Если x≢y(modm), то положить pgcd(xy,m) и выдать результат: p.

В противном случае вернуться на шаг 3 и поменять множество K. (Обычно есть несколько вариантов выбора множества K для одной и той же факторной базы B. Если все возможности исчерпаны, то следует увеличить размер факторной базы).

Из полученного алгоритма впоследствии был разработан алгоритм Диксона, из которого был удален аппарат цепных дробейШаблон:Sfn. После создания алгоритма Диксона, метод непрерывных дробей, по сути, представлял собой алгоритм Диксона, в котором был уточнен выбор абсолютно наименьшего вычета uiШаблон:Sfn.

Некоторые улучшения

Пусть m=pq. Выше в непрерывную дробь раскладывалось число m. Такой вариант эффективен, когда p и q близки друг к другу. Однако, чем больше разность между числами p и q, тем более трудоемким становится алгоритм. В этом случае вместо m можно раскладывать в непрерывную дробь число km , где маленький множитель k подбирается так, чтобы в базу множителей вошли все малые простыеШаблон:Sfn.

Кроме того, так как метод непрерывных дробей построен по схеме алгоритма Диксона, то для него применимы дополнительные стратегии алгоритма Диксона.

Обоснование

Следующая лемма показывает, что если выполнено сравнение x2y2(modm) и x≢y(modm), то числа xy и m имеют общие делители.Шаблон:Якорь

Лемма(о факторизации)Шаблон:Sfn. Пусть m — нечётное составное число и x,y — вычеты по модулю m такие, что x≢±y(modm) и x2y2(modm). Тогда выполняется неравенство 1<gcd(xy,m)<m.

Следующие два утверждения — ключевые для алгоритма факторизации методом непрерывных дробей. Они показывают, что можно найти последовательность чисел ui, квадраты которых имеют малые вычеты по модулю m. Шаблон:Якорь

ТеоремаШаблон:Sfn. Если PnQn, где n=1,2,, — подходящие дроби к числу α>1, которое задано обыкновенной непрерывной дробью, то для всех n справедлива оценка |Pn2α2Qn2|<2α.

СледствиеШаблон:Sfn. Пусть положительное число m не является полным квадратом и PnQn, где n=1,2,, — подходящие дроби к числу m. Тогда для абсолютно наименьшего вычета Pn2modm (т.е. для вычета, расположенного между m2 и m2) справедливо неравенство |Pn2modm|<2m, причем Pn2modm=Pn2mQn2.

Примеры

Пример 1Шаблон:SfnШаблон:Якорь

Разложим на множители первым алгоримом Лемера и Пауэрса число m=1081.

1. Будем раскладывать число ξ=m=1081 в непрерывную дробь и записывать числа An,Bn в таблицу для получения уравнений вида u2υ(modm).

Таблица: факторизация числа 1081
i xi Ai Bi
1 32+108157 32 57
2 25+10818 25 8
3 31+108115 31 15
4 29+108116 29 16
5 19+108145 19 45
6 26+10819 26 9

2. Теперь запишем сравнения BnBn1An2(modm) для n=2,3,4,5,6:

23319252(mod1081),
2335312(mod1081),
2435292(mod1081),
24325192(mod1081),
345262(mod1081).

3. Перемножая четвертое и пятое сравнения, получим:

(1)224325345192262(mod1081),

и, приводя подобные множители и сокращая на 32:

243652192262(mod1081) или 54024942(mod1081).

4. Получили сравнение вида x2y2(modm), используя которое можно найти делитель числа 1081. Действительно, gcd(540494,1081)=23. Тогда, второй делитель числа 1081 равен 47.

Пример 2Шаблон:Sfn

Разложим на множители методом Морриса и Брилхарта число m=21299881.

1. Строим базу разложения из маленьких простых чисел, выбирая числа, по модулю которых m является квадратичным вычетом, что проверяется вычислением символов Лежандра:

(m3)=(m5)=(m7)=(m11)=(m19)=1.

Отсюда, факторная база будет равна B={1,2,3,5,7,11,19}, h=6.

2. Ищем числители Pi подходящих дробей к числу m:

m=[4615;5,1,1,2,1,7,1,27,1,6,1,2,12,23,1,8,2,3,6,1,1,1,].

Выбираем те из них, для которых значения Pi2modm являются B-гладкими. Результаты вычислений записываем в таблицу:

k i Pi PШаблон:Supi (modm) ei
1 2 27691 4235=157112 (1, 0, 0, 1, 1, 0, 0)
2 3 50767 2688=2737 (0, 1, 1, 0, 1, 0, 0)
3 6 1389169 7920=12432511 (1, 0, 0, 1, 0, 1, 0)
4 13 12814433311 385=5711 (0, 0, 0, 1, 1, 1, 0)
5 16 2764443209657 3800=1235219 (1, 1, 0, 0, 0, 0, 1)
6 18 20276855015255 1331=1113 (1, 0, 0, 0, 0, 1, 0)
7 19 127498600693396 5415=35192 (0, 0, 1, 1, 0, 0, 0)
8 24 2390521616955537 112=1247 (1, 0, 0, 0, 1, 0, 0)

3. Поскольку e1e3e6e8=0, то получаем

4. x=P2P6P18P2412487442(modm),

y=24315171113190=2236080,
x2y213201055(modm).

5. Условие x≢±y(modm) выполнено, поэтому вычисляем p=gcd(xy,m)=gcd(10251362,21299881)=3851.

Поэтому, 21299881=38515531.

Вычислительная сложность

С появлением криптосистемы RSA в конце 1970-х годов стала особенно важна вычислительная сложность алгоритмов факторизацииШаблон:Sfn.

Эвристический анализ времени выполнения алгоритма Морриса и Брилхарта был проведен Шаблон:Нп4 в 1975 году, хотя не был опубликованШаблон:SfnШаблон:Sfn.

Более точная оценка(которая при этом все равно оставалась эвристической) была проведена в работеШаблон:Sfn. Приведем результаты оценки сложности в соответствии с этой работой.

При получении оценок в этой работе делаются некоторые эвристические допущения. Например, предполагают, что если помощью алгоритма построено 1+[log2m] пар (x,y) таких, что x2y2(modm), то хотя бы для одной из них выполнены неравенства

1<gcd(x±y,m).

УтверждениеШаблон:Sfn. Если a=12, L=L(m)=exp((logmloglogm)1/2) и факторная база состоит из p=1 и всех простых чисел p таких, что:

2pLa,(mp)=+1,

то при вычислении Lb подходящих дробей, где b=a+14a, можно ожидать, что алгоритм разложит m на два множителя с эвристической оценкой сложности Lm[12;2] арифметических операций.

См. также

Примечания

Шаблон:Примечания

Литература

Шаблон:Добротная статья

  1. Kraitchik M. Théorie des Nombres. Tome I et II. — Paris:Gauthier-Villars. — 1926.