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

Алгоритм Диксона — Википедия

Алгоритм Диксона

Алгоритм Диксона — алгоритм факторизации, использующий в своей основе идею Лежандра, заключающуюся в поиске пары целых чисел x и y таких, что x 2 y 2 ( mod n ) и x ± y ( mod n ) .

Метод Диксона является обобщением метода Ферма.

История [1]Править

В 20-х г. XX столетия Морис Крайчик (1882—1957), обобщая теорему Ферма предложил вместо пар чисел, удовлетворяющих уравнению x 2 y 2 = n  , искать пары чисел, удовлетворяющих более общему уравнению x 2 y 2 ( mod n )  . Крайчик заметил несколько полезных для решения фактов. В 1981 г. Джон Диксон опубликовал разработанный им метод факторизации, использующий идеи Крайтчика, и рассчитал его вычислительную сложность.[2]

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

  1. Составить факторную базу B = { p 1 , p 2 , , p h }  , состоящую из всех простых чисел p <= M = L ( n ) 1 2  , где L ( n ) = exp ( ln n ln ln n )  .
  2. Выбрать случайное b , n < b < n  
  3. Вычислить a = b 2 mod n  .
  4. Проверить число a   на гладкость пробными делениями. Если a   является B  -гладким числом, то есть a = p B p α p ( b )  , следует запомнить вектора α ( b )   и ε ( b )  :
    α ( b ) = ( α p 1 ( b ) , , α p h ( b ) )  
    ε ( b ) = ( α p 1 ( b ) mod 2 , , α p h ( b ) mod 2 )  .
  5. Повторять процедуру генерации чисел b   до тех пор, пока не будет найдено h + 1   B  -гладких чисел b 1 , . . . , b h + 1  .
  6. Методом Гаусса найти линейную зависимость среди векторов ε ( b 1 ) , , ε ( b h + 1 )  :
    ε ( b i 1 ) ε ( b i t ) = 0 , 1 t m  
    и положить:
    x = b i 1 b i t mod n  
    y = p B p ( α p ( b i 1 ) + + α p ( b i t ) ) 2 mod n  .
  7. Проверить x ± y ( mod n )  . Если это так, то повторить процедуру генерации. Если нет, то найдено нетривиальное разложение:
    n = u v , u = g c d ( x + y , n ) , v = g c d ( x y , n ) .  

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

Факторизуем число n = 89755  .

L ( 89755 ) = 194 , 174...  
M = 13 , 934...  
B = { 2 , 3 , 5 , 7 , 11 , 13 }  

Все найденные числа b   с соответствующими векторами α ( b )   записываем в таблицу.

b   a   α 2 ( b )   α 3 ( b )   α 5 ( b )   α 7 ( b )   α 11 ( b )   α 13 ( b )  
337 23814 1 5 0 2 0 0
430 5390 1 0 1 2 1 0
519 96 5 1 0 0 0 0
600 980 2 0 1 2 0 0
670 125 0 0 3 0 0 0
817 39204 2 4 0 0 2 0
860 21560 3 0 1 2 1 0

Решая линейную систему уравнений, получаем, что ε ( 337 ) ε ( 519 ) = 0  . Тогда

x = 337 519 mod 89755 = 85148  
y = 2 3 3 3 7 1 mod 89755 = 1512  
85148 ± 1512 ( mod 89755 )  

Следовательно,

u = g c d ( 86660 , 89755 ) = 3095  
v = g c d ( 83636 , 89755 ) = 29  .

Получилось разложение 89755 = 3095 29  

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

Обозначим через Ψ ( n , M )   количество целых чисел a   таких, что 1 < a n   и a   является B  -гладким числом, где B = { p : p < M }  . Из теоремы де Брёйна — Эрдёша Ψ ( n , M ) = n u u  , где u = ln n ln M  . Значит, каждое B  -гладкое число будет в среднем попадаться с u u   попыток. Для проверки, является ли число B  -гладким, необходимо выполнить h   делений. По алгоритму необходимо найти h + 1   B  -гладкое число. Значит, вычислительная сложность поиска чисел

T 1 = O ( u u h 2 )  .

Вычислительная сложность метода Гаусса из h   уравнений

T 2 = O ( h 3 )  .

Следовательно, суммарная сложность алгоритма Диксона

T = T 1 + T 2 = O ( u u h 2 + h 3 )  .

Учитывая, что количество простых чисел меньше M   оценивается формулой h = M ln M  , и что u = ln n ln M  , после упрощения получаем

T = O ( e x p ( ln n ln ln n ln M + 2 ln M ) )  .

M   выбирается таким образом, чтобы T   было минимально. Тогда подставляя L ( n ) = exp ( ln n ln ln n )  , получаем

M = ( L ( n ) 2 ) 1 2  
T = O ( L ( n ) 2 2 )  .

Оценка, сделанная Померанцем на основании более строгой теоремы, чем теорема де Брёйна — Эрдеша[6], дает T = O ( L ( n ) 2 )  , в то время как изначальная оценка сложности, сделанная самим Диксоном, дает T = O ( L ( n ) 3 2 )  .

Дополнительные стратегии [7]Править

Рассмотрим дополнительные стратегии, ускоряющие работу алгоритма.

Стратегия LPПравить

Стратегия LP (Large Prime variation) использует большие простые числа для ускорения процедуры генерации чисел b  .

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

Пусть найденное в пункте 4 число a   не является B  -гладким. Тогда его можно представить a = s p B p α p ( b )  , где s   не делится на числа из факторной базы. Очевидно, что s > M  . Если дополнительно выполняется s < M 2  , то s — простое и мы включаем его в факторную базу. Это позволяет найти дополнительные B  -гладкие числа, но увеличивает количество необходимых гладких чисел на 1. Для возврата к первоначальной факторной базе после пункта 5 следует сделать следующее. Если найдено только одно число, в разложение которого s   входит в нечетной степени, то это число нужно вычеркнуть из списка и вычеркнуть s   из факторной базы. Если же, например, таких чисел два b 1   и b 2  , то их нужно вычеркнуть и добавить число b = b 1 b 2  . Показатель s   войдет в разложение b 2 mod n   в четной степени и будет отсутствовать в системе линейных уравнений.

Вариация стратегииПравить

Можно использовать стратегию LP с несколькими простыми числами, не содержащимися в факторной базе. В этом случае для исключения дополнительных простых чисел используется теория графов.

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

Теоретическая оценка сложности алгоритма с применением LP стратегии, сделанная Померанцем, не отличается от оценки исходного варианта алгоритма Диксона:

T L P = O ( L ( n ) 2 )  .

Стратегия EASПравить

Стратегия EAS (раннего обрыва) исключает некоторые b   из рассмотрения, не доводя проверку a   на гладкость до конца.

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

Выбираются фиксированные 0 < k , l , m < 1  . В алгоритме Диксона a   факторизуется пробными делениями на p < M = L ( n ) 1 2  . В стратегии EAS выбирается M = L ( n ) k   и число сначала факторизуется пробными делениями на p < M l = L ( n ) k l  , и если после разложения неразложенная часть остается больше, чем n 1 m  , то данное b   отбрасывается.

Вариация стратегииПравить

Можно использовать стратегию EAS с несколькими обрывами, то есть при некоторой возрастающей последовательности l j   и убывающей последовательности m j  .

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

Алгоритм Диксона с применением стратегии EAS при k = 2 7 , l = 1 2 , m = 1 7   оценивается

T E A S = O ( L ( n ) 7 2 )  .

Стратегия PSПравить

Стратегия PS использует алгоритм Полларда-Штрассена, который для z , t N   и y = z 2   находит минимальный простой делитель числа НОД ( t , y ! )   за O ( z ln 2 z ln 2 t )  .[8]

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

Выбирается фиксированное 0 < k < 1  . В алгоритме Диксона a   факторизуется пробными делениями на p < M = L ( n ) 1 2  . В стратегии PS выбирается M = L ( n ) k  . Полагаем z = [ L ( n ) k 2 ] + 1 , y = z 2 L ( n ) k , t = a  . Применяем алгоритм Полларда-Штрассена, выбирая за t   неразложенную часть, получим разложение a  .

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

Сложность алгоритма Диксона со стратегией PS минимальна при k = 1 3   и равна

T P S = O ( L ( n ) 3 )  .

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

  1. Ишмухаметов, 2011, с. 115.
  2. Dixon, J. D.  (англ.) (рус.. Asymptotically fast factorization of integers (англ.) // Math. Comp.  (англ.) (рус. : journal. — 1981. — Vol. 36, no. 153. — P. 255—260. — doi:10.1090/S0025-5718-1981-0595059-1. — JSTOR 2007743.
  3. Черемушкин, 2001, с. 77-79.
  4. Василенко, 2003, с. 79.
  5. Черемушкин, 2001, с. 79-80.
  6. C. Pomerance. Analysis and comparison of some integer factoring algorithms (англ.) // H. W. Lenstra and R. Tijdeman, Eds., Computational Methods in Number Theory, Math Centre Tracts —Part 1. Math Centrum, Amsterdam : Статья. — 1982. — С. 89-139. Архивировано 6 ноября 2021 года.
  7. Василенко, 2003, с. 81-83.
  8. Черемушкин, 2001, с. 74-75.

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