Это не официальный сайт wikipedia.org 01.01.2023

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

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

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

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

Алгоритм имеет сложность O ( e 2 log m log log m ) = L m [ 1 2 , 2 ] , в O и L нотациях[2].

ИсторияПравить

Метод непрерывных дробей был предложен Д. Г. Лемером и Р. Е. Поверсомruen в 1931 году[3]. Этот метод основывался на идеях Лежандра и Крайчикаruen и предназначался для разложения больших чисел, содержащих 30 и более десятичных разрядов. Однако, полученный метод не применялся из-за трудностей, связанных с его реализацией на настольных арифмометрах[4].

В конце 1960-х годов Джон Бриллхартruen обнаружил, что этот метод хорошо подходит для компьютерного программирования, и совместно с Михаэлем А. Моррисоном, переработал этот алгоритм для ЭВМ в 1975 году[5].

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

2 2 7 + 1 = 59649589127497217 5704689200685129054721.  

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

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

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

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

a b = ( a + b 2 ) 2 ( a b 2 ) 2 = x 2 y 2 = m  ,

где x = a + b 2 , y = a b 2  .

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

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

В 1926 году Морис Крайчикruen в монографии[7] представил свой метод факторизации целых чисел, который представлял собой «усиление» метода Ферма.

Крайчик предложил вместо пар чисел ( x , y )  , удовлетворяющих соотношению x 2 y 2 = m  , искать пары ( x , y )  , удовлетворяющие сравнению x 2 y 2 0 ( mod m )  , т.е. x 2 y 2 ( mod m )  . Если, при этом, x ± y ( mod m )  , то мы получим лишь тривиальное решение. Однако, если x ± y ( mod m )  , то из указанного сравнения получается x 2 y 2 = ( x y ) ( x + y ) = k m  , где k Z  . Отсюда тоже следует разложение: m   делится на ( x y ) ( x + y )  , но не делится ни на x y  , ни на x + y  , следовательно gcd ( x y , m )   — нетривиальный делитель m  [2] (см. #обоснование1).

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

Действительно, рассмотрим последовательность чисел вида υ ( u ) = u 2 m   (очевидно, υ u 2 ( mod m )  ). Тогда, если υ ( u 1 ) υ ( u 2 ) υ ( u k ) = y 2  , т.е. ( u 1 2 m ) ( u 2 2 m ) ( u k 2 m ) = y 2  , то отсюда следует, что x 2 = u 1 2 u 2 2 u k 2 y 2 ( mod m )  [2]. Для того, чтобы определить, какие именно соотношения нужно перемножить, необходимо раскладывать числа υ   на множители и перемножать соотношения так, чтобы в произведениях υ 1 υ 2 υ k   присутствовали простые множители в четных степенях, позволяющие получить сравнение x 2 y 2 ( mod m )  [8].

Метод Крайчика сводит задачу разложения числа m   на множители к построению некоторого количества сравнений u 2 υ ( mod m )   и разложению на множители чисел υ  . Однако Крайчик не предъявил конкретный алгоритм поиска пар чисел u , υ   и алгоритмический способ составления из найденных соотношений сравнения вида x 2 y 2 ( mod m )  [8].

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

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

Однако, у обоих вариантов алгоритма был недостаток — разложение квадратичной иррациональности в непрерывную дробь периодично (теорема Лагранжа). Поэтому количество соотношений, которые можно получить с помощью данного метода, ограниченно, и их может оказаться недостаточно для набора соотношений и построения сравнения x 2 y 2 ( mod m )  . При этом, как показывают практические эксперименты, при больших значениях m   длина периода разложения в непрерывную дробь оказывается достаточно большой (порядка m   [10]) для составления требуемого числа сравнений. В результате при больших m   оба варианта алгоритма всегда находят разложение числа m   на множители[11].

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

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

x 0 = ξ , b i = [ x i ] , x i + 1 = 1 x i b i , i = 0 , 1 , 2 , .  

При этом ξ = b 0 + 1 b 1 + 1 b 2 + 1 + 1 x n = [ b 0 , b 1 , b 2 , , b n 1 , x n ] .  

Если раскладывать в непрерывную дробь число ξ = m  , то возникающие в процессе разложения числа x n   имеют вид x n = m + A n B n   с целыми A n , B n  , причем выполняется A n < m  , 0 < B n < 2 m  [12].

Для коэффициентов A n , B n   выполняется равенство[3]:

A n 2 + B n B n 1 = m .  

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

B n B n 1 A n 2 ( mod m ) , n = 0 , 1 ,   . ( 1 )  

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

Вычисляя последовательно частные A 0 , B 0 , A 1 , B 1 ,  , будем получать выражения вида ( 1 )   для различных n  . Раскладывая величины B n   на простые множители и комбинируя полученные равенства, можно получить сравнения вида x 2 y 2 ( mod m )   (см. #пример1).

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

С каждой непрерывной дробью свяжем последовательность рациональных чисел, состоящую из подходящих дробей P n Q n = [ b 0 , b 1 , , b n 1 , b n ] , n > 0  , вычисляемых по формулам[3]:

P n + 1 = b n + 1 P n + P n 1 , Q n + 1 = b n + 1 Q n + Q n 1 , n 0 ,  
P 0 = b 0 , Q 0 = P 1 = 1 , Q 1 = 0  

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

P n 1 2 m Q n 1 = ( 1 ) n B n   ,

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

P n 1 2 ( 1 ) n B n ( mod m ) , n = 1 , 2 ,   . ( 2 )  

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

АлгоритмПравить

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

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

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

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

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

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

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

Основное отличие реализованного Моррисоном и Бриллхартом алгоритма от первоначального варианта заключалось в введении процедуры алгоритмического построения сравнения x 2 y 2 ( mod m )   по заданному множеству сравнений вида u 2 υ ( mod m )  . Для реализации этой процедуры использовалось понятие «факторной базы»[11].

Будем искать x   как произведение таких чисел u i  , что наименьший по абсолютной величине вычет числа u i 2   по модулю m   является произведением простых чисел[14]. Тогда из тех же простых чисел можно построить и y  .

Базой факторизации (или факторной базой) натурального числа m   называется множество B = { p 0 , p 1 , , p h }   различных простых чисел p i  , за возможным исключением p 0  , которое может быть равным 1  . При этом число b  , для которого b 2 mod m   является произведением степеней чисел из множества B  , называется B-гладким числом. Пусть теперь u i   — B-гладкие числа, υ i = u i 2 mod m = j = 0 h p j α i j   — разложения их наименьшие по абсолютной величине вычетов по модулю m  . Положим

e i = ( e i 0 , e i 1 , , e i h ) F 2 h  ,

где e i j α i j mod 2  , F 2 h   — векторное пространство над полем GF(2), которое состоит из наборов нулей и единиц размерности h  .

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

x = ( i u i ) mod m , y = j = 0 h p j γ j  ,

где γ j = 1 2 i α i j  . Тогда x 2 y 2 ( mod m )  .

Осталось добавить, что факторная база в алгоритме Моррисона и Бриллхарта состоит из тех простых чисел p i  , по модулю которых m   является квадратичным вычетом[15].

АлгоритмПравить

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

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

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

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

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

u i 2 mod m = j = 0 h p j α i j = υ i  ,

где α i j 0  . Также каждому числу u i   сопоставляется вектор показателей ( α i 0 , α i 1 , , α i h )  .

3. Найти (например, методом Гаусса) такое непустое множество K { 1 , 2 , , h + 1 }  , что i K e i = 0  , где   — операция исключающее ИЛИ, e i = ( e i 1 , e i 2 , , e i h ) , e i j α i j ( mod 2 )  , 0 j h  .

4. Положить x i K u i mod m , y j = 1 h p j 1 2 i K α i j mod m  . Тогда x 2 y 2 ( mod m )  .

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

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

Из полученного алгоритма впоследствии был разработан алгоритм Диксона, из которого был удален аппарат цепных дробей[17]. После создания алгоритма Диксона, метод непрерывных дробей, по сути, представлял собой алгоритм Диксона, в котором был уточнен выбор абсолютно наименьшего вычета u i  [18].

Некоторые улучшенияПравить

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

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

ОбоснованиеПравить

Следующая лемма показывает, что если выполнено сравнение x 2 y 2 ( mod m )   и x y ( mod m )  , то числа x y   и m   имеют общие делители.

Лемма(о факторизации)[20]. Пусть m   — нечётное составное число и x , y   — вычеты по модулю m   такие, что x ± y ( mod m )   и x 2 y 2 ( mod m )  . Тогда выполняется неравенство 1 < gcd ( x y , m ) < m  .

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

Теорема[21]. Если P n Q n  , где n = 1 , 2 ,  , — подходящие дроби к числу α > 1  , которое задано обыкновенной непрерывной дробью, то для всех n   справедлива оценка | P n 2 α 2 Q n 2 | < 2 α  .

Следствие[21]. Пусть положительное число m   не является полным квадратом и P n Q n  , где n = 1 , 2 ,  , — подходящие дроби к числу m  . Тогда для абсолютно наименьшего вычета P n 2 mod m   (т.е. для вычета, расположенного между m 2   и m 2  ) справедливо неравенство | P n 2 mod m | < 2 m  , причем P n 2 mod m = P n 2 m Q n 2  .

ПримерыПравить

Пример 1[22]

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

1. Будем раскладывать число ξ = m = 1081   в непрерывную дробь и записывать числа A n , B n   в таблицу для получения уравнений вида u 2 υ ( mod m )  .

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

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

2 3 3 19 25 2 ( mod 1081 ) ,  
2 3 3 5 31 2 ( mod 1081 ) ,  
2 4 3 5 29 2 ( mod 1081 ) ,  
2 4 3 2 5 19 2 ( mod 1081 ) ,  
3 4 5 26 2 ( mod 1081 ) .  

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

( 1 ) 2 2 4 3 2 5 3 4 5 19 2 26 2 ( mod 1081 ) ,  

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

2 4 3 6 5 2 19 2 26 2 ( mod 1081 )   или 540 2 494 2 ( mod 1081 ) .  

4. Получили сравнение вида x 2 y 2 ( mod m )  , используя которое можно найти делитель числа 1081. Действительно, gcd ( 540 494 , 1081 ) = 23  . Тогда, второй делитель числа 1081 равен 47.

Пример 2[23]

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

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

( m 3 ) = ( m 5 ) = ( m 7 ) = ( m 11 ) = ( m 19 ) = 1.  

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

2. Ищем числители P i   подходящих дробей к числу 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 , ] .  

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

k i Pi P2i ( mod m )   ei
1 2 27691 4235 = 1 5 7 11 2   (1, 0, 0, 1, 1, 0, 0)
2 3 50767 2688 = 2 7 3 7   (0, 1, 1, 0, 1, 0, 0)
3 6 1389169 7920 = 1 2 4 3 2 5 11   (1, 0, 0, 1, 0, 1, 0)
4 13 12814433311 385 = 5 7 11   (0, 0, 0, 1, 1, 1, 0)
5 16 2764443209657 3800 = 1 2 3 5 2 19   (1, 1, 0, 0, 0, 0, 1)
6 18 20276855015255 1331 = 1 11 3   (1, 0, 0, 0, 0, 1, 0)
7 19 127498600693396 5415 = 3 5 19 2   (0, 0, 1, 1, 0, 0, 0)
8 24 2390521616955537 112 = 1 2 4 7   (1, 0, 0, 0, 1, 0, 0)

3. Поскольку e 1 e 3 e 6 e 8 = 0  , то получаем

4. x = P 2 P 6 P 18 P 24 12487442 ( mod m )  ,

y = 2 4 3 1 5 1 7 1 11 3 19 0 = 2236080  ,
x 2 y 2 13201055 ( mod m )  .

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

Поэтому, 21299881 = 3851 5531  .

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

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

Эвристический анализ времени выполнения алгоритма Морриса и Брилхарта был проведен Р. Шруппелемruen в 1975 году, хотя не был опубликован[24][2].

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

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

1 < gcd ( x ± y , m )  .

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

2 p L a , ( m p ) = + 1  ,

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

См. такжеПравить

ПримечанияПравить

  1. Кнут, 2013, pp. 439,441.
  2. 1 2 3 4 5 6 7 8 Pomerance, 1996.
  3. 1 2 3 4 5 Lehmer, Powers, 1931.
  4. 1 2 Кнут, 2013, pp. 434.
  5. 1 2 Morrison, Brillhart, 1975.
  6. Маховенко, 2006, pp. 223.
  7. Kraitchik M. Théorie des Nombres. Tome I et II. — Paris:Gauthier-Villars. — 1926.
  8. 1 2 Нестеренко, 2012, pp. 173.
  9. Нестеренко, 2012, pp. 175.
  10. Ященко, 1999, pp. 113.
  11. 1 2 Нестеренко, 2012, pp. 178.
  12. 1 2 Ященко, 1999, pp. 112-113.
  13. Нестеренко, 2012, pp. 173,185.
  14. Манин, 1990, pp. 78.
  15. Маховенко, 2006, pp. 220.
  16. Маховенко, 2006, pp. 218-220.
  17. Кнут, 2013, pp. 439.
  18. Маховенко, 2006, pp. 219.
  19. Ященко, 1999, pp. 114.
  20. Нестеренко, 2012, pp. 172.
  21. 1 2 Маховенко, 2006, pp. 219-220.
  22. Нестеренко, 2012, pp. 176-177.
  23. Маховенко, 2006, pp. 221-222.
  24. Кнут, 2013, pp. 436.
  25. Pomerance, 1982.
  26. Василенко, 2003, pp. 87.

ЛитератураПравить