Interested Article - Ро-алгоритм Полларда

Числовая последовательность зацикливается, начиная с некоторого n . Цикл может быть представлен в виде греческой буквы ρ.

Ро-алгоритм ( -алгоритм ) — предложенный в 1975 году алгоритм , служащий для факторизации (разложения на множители) целых чисел. Данный алгоритм основывается на алгоритме Флойда поиска длины цикла в последовательности и некоторых следствиях из парадокса дней рождения . Алгоритм наиболее эффективен при факторизации составных чисел с достаточно малыми множителями в разложении. Сложность алгоритма оценивается как .

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

История алгоритма

В конце 60-х годов XX века Роберт Флойд придумал достаточно эффективный метод решения задачи нахождения цикла , также известный, как алгоритм «черепаха и заяц» . , Дональд Кнут и другие математики проанализировали поведение этого алгоритма в среднем случае. Было предложено несколько модификаций и улучшений алгоритма .

В 1975 году Поллард опубликовал статью , в которой он, основываясь на алгоритме Флойда обнаружения циклов, изложил идею алгоритма факторизации чисел, работающего за время, пропорциональное . Автор алгоритма назвал его методом факторизации Монте-Карло, отражая кажущуюся случайность чисел, генерируемых в процессе вычисления. Однако позже метод всё-таки получил своё современное название — ρ-aлгоритм Полларда .

В 1981 году Ричард Брент и Джон Поллард с помощью алгоритма нашли наименьшие делители чисел Ферма при . Скорость алгоритма сильно зависит лишь от величины наименьшего делителя исходного числа, но не от самого числа. Так, поиск наименьшего делителя седьмого числа Ферма — , занимает гораздо больше времени, чем поиск делителя двенадцатого числа Ферма (т.к. его делитель 114689 значительно меньше, хотя само число состоит более чем из 1200 десятичных цифр).

В рамках проекта « » алгоритм Полларда помог найти делитель длиной 19 цифр числа . Большие делители также могли бы быть найдены, однако открытие метода факторизации с помощью эллиптических кривых сделало алгоритм Полларда неконкурентоспособным .

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

Оригинальная версия

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

1. Вычисляются тройки чисел
, где .
Причём каждая такая тройка получается из предыдущей.
2. Каждый раз, когда число кратно числу (скажем, ), вычисляется наибольший общий делитель любым известным методом.
3. Если , то частичное разложение числа найдено, причём .
Найденный делитель может быть составным, поэтому его также необходимо факторизовать. Если число составное, то продолжаем алгоритм с модулем .
4. Вычисления повторяются раз. Если при этом число не было до конца факторизовано, выбирается, например, другое начальное число .

Современная версия

Пусть составное целое положительное число, которое требуется разложить на множители. Алгоритм выглядит следующим образом :

  1. Случайным образом выбирается небольшое число и строится последовательность , определяя каждое следующее как .
  2. Одновременно на каждом i -ом шаге вычисляется для каких-либо , таких, что , например, .
  3. Если , то вычисление заканчивается, и найденное на предыдущем шаге число является делителем . Если не является простым числом, то процедуру поиска делителей продолжается, взяв в качестве число .

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

Если известно, что для делителя числа справедливо при некотором , то имеет смысл использовать .

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

Улучшения алгоритма

Изначальная версия алгоритма обладает рядом недостатков. В настоящий момент существует несколько подходов к улучшению оригинального алгоритма.

Пусть . Тогда, если , то , поэтому, если пара даёт решение, то решение даст любая пара .

Поэтому нет необходимости проверять все пары , а можно ограничиться парами вида , где , и пробегает набор последовательных значений 1, 2, 3, …, а принимает значения из интервала . Например, , , а .

Эта идея была предложена Ричардом Брентом в 1980 году и позволяет уменьшить количество выполняемых операций приблизительно на 25 % .

Ещё одна вариация ρ-алгоритма Полларда была разработана Флойдом . Согласно Флойду, значение обновляется на каждом шаге по формуле , поэтому на шаге будут получены значения , , и НОД на этом шаге вычисляется для и .

Пример факторизации числа

Данный пример наглядно демонстрирует ρ-алгоритм факторизации (версия алгоритма, с улучшением Флойда ), для числа N = 8051:

Таблица: факторизация числа 8051
n = 8051, F ( x ) = ( x 2 + 1) mod n , x 0 = y 0 = 2
i x i = F ( x i -1 ) y i = F ( F ( y i -1 )) НОД(| x i y i |, 8051)
1 5 26 1
2 26 7474 1
3 677 871 97

Используя другие варианты полинома , можно также получить делитель 83:

Таблица: факторизация числа 8051
n = 8051, F ( x ) = ( x 2 + 3) mod n , x 0 = y 0 = 2
i x i = F ( x i -1 ) y i = F ( F ( y i -1 )) НОД(| x i y i |, 8051)
1 7 52 1
2 52 1442 1
3 2707 778 1
4 1442 3932 83

Таким образом, d 1 = 97, d 2 = 83 — нетривиальные делители числа 8051.

После нахождения делителя числа, в ρ-алгоритме предлагается продолжать вычисления и искать делители числа , если не является простым. В этом простом примере данного шага совершать не потребовалось .

Обоснование ρ-алгоритма Полларда

Алгоритм основывается на известном парадоксе дней рождения .

Парадокс дней рождений, кратко:
Пусть . Для случайной выборки из элементов, каждый из которых меньше , где , вероятность того, что два элемента окажутся одинаковыми .

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

Пусть последовательность состоит из разностей , проверяемых в ходе работы алгоритма. Определяется новая последовательность , где , — меньший из делителей числа .

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

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

Сложность алгоритма

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

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

Справедливо следующее утверждение: пусть составное число . Тогда существует такая константа , что для любого положительного числа вероятность события, состоящего в том, что ρ-алгоритм Полларда не найдет нетривиального делителя за время , не превосходит величины . Данное утверждение следует из парадокса дней рождения .

Особенности реализации

Объём памяти, используемый алгоритмом, можно значительно уменьшить.

 int Rho-Поллард (int N)
 { 
   int x = random(1, N-2);
   int y = 1; int i = 0; int stage = 2;
   while (Н.О.Д.(N, abs(x - y)) == 1)
   {
     if (i == stage){
       y = x;
       stage = stage*2; 
     }
     x = (x*x + 1) (mod N);
     i = i + 1;
   }
   return Н.О.Д(N, abs(x-y));
 }

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

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

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

Система с распределенной памятью

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

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

Ричард Крэндалл предположил, что достижимо ускорение , однако данное утверждение пока не проверено .

Система с общей памятью

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

Примечания

  1. , с. 521–528.
  2. , 3.3.3.0.
  3. , 5.2.2.
  4. , с. 636–644.
  5. , An improved Monte Carlo factorization algorithm, с. 176.
  6. , A Monte Carlo method for factorization, с. 176.
  7. , Elementary Number Theory with Applications.
  8. , A Concrete Introduction to Higher Algebra.
  9. , Some parallel algorithms for integer factorization..
  10. , A Monte Carlo method for factorization.
  11. , с. 64.
  12. , с. 215—216.
  13. Золотых Н. Ю. Лекции по компьютерной алгебре. от 30 октября 2014 на Wayback Machine
  14. , An improved Monte Carlo factorization algorithm, с. 176—184.
  15. , Selected Areas in Cryptography. Prime Numbers and Computer Methods for Factorization. 2nd ed..
  16. , Introduction to Algorithms. Section 31.9. Integer Factorization. Pollard's rho heuristic..
  17. , с. 63.
  18. , с. 12.
  19. , Random Walks Revisited: Extensions of Pollard’s Rho Algorithm for Computing Multiple Discrete Logarithms, с. 212—229.
  20. , Parallelization of Polldar-rho factorization.
  21. , с. 19.

Литература

  • Василенко О. Н. . — М. : МЦНМО , 2003. — 328 с. — ISBN 5-94057-103-4 . от 27 января 2007 на Wayback Machine
  • Ишмухаметов Ш. Т. / Захаров В.М.. — Казань: Казанский Университет, 2011. — С. 61—64. — 190 с. — ISBN 978-3-659-17639-5 .
  • Косяков М.С. / НИУ ИТМО. — СПб. , 2014. — 155 с.
  • Герман О.Н., Нестеренко А.Ю. . — М. , 2012. — 300 с.
  • Соловьёв Ю. П., Садовничий В. А. , Шавгулидзе Е. Т. , Белокуров В. В. Эллиптические кривые и современные алгоритмы теории чисел. — М. : Ин-т компьют. исслед., 2003. — 192 с. — ISBN ISBN 5-939722-27-X .
  • Brent R. P. (англ.) = Some parallel algorithms for integer factorization. — 1999. — С. 7 . — doi : .
  • Brent R. P. (англ.) // BIT Numerical Mathematics. — 1980. — 1 June ( vol. 20 , iss. 2 ). — P. 176—184 . — ISSN . — doi : .
  • Chatterjee S., Sarkar P. (англ.) // Identity-Based Encryption. — Boston: Springer US, 2008. — ISBN 978-1-59693-238-8 .
  • Childs, Lindsay N. Congruences // = Concrete Introduction to Higher Algebra. — 3-е изд. — USA: Springer, 2009. — С. 471—473. — 603 с. — ISBN 978-0-387-74725-5 .
  • Chris Christensen. // Cryptologia. — 2009. — 27 января ( т. 33 , вып. 1 ). — ISSN . — doi : .
  • Cormen T.H., Leiserson C.E., Rivest R.L., Stein C. = Introduction to algorithms. — 2-е изд. — USA: MIT Press, 2001. — С. 897—907. — 1180 с. — ISBN 9780262032933 .
  • Crandall R.E. (англ.) = Parallelization of Polldar-rho factorization. — 1999. 6 июля 2010 года.
  • Koshy T. Congruences // = Elementary Number Theory with Applications. — 2-е изд. — USA: Academic Press, 2007. — С. 238. — 771 с. — ISBN 9780123724878 .
  • Kuhn F., Struik R. (англ.) // Selected Areas in Cryptography / Serge Vaudenay, Amr M.. — Springer Berlin Heidelberg, 2001. — P. 212—229 . — ISBN 978-3-540-43066-7 , 978-3-540-45537-0 . — doi : .
  • Mollin R.A. / Rosen K.H.. — 2. — London: Chapman and Hall, 2006. — 413 с. — ISBN 9781584886181 . 4 марта 2016 года.
  • Pollard J. M. // BIT Numerical Mathematics. — 1975. — Vol. 15, № 3 . — P. 331–334.
  • Pollard J.M. // Mathematical Proceedings of the Cambridge Philosophical Society. — 1974. — Т. 76 , вып. 03 . — С. 521–528 . — ISSN . — doi : .
  • Pollard J. M. (англ.) = Theorems on factorization and primality testing. // Математические Труды Кэмбриджского Философского Общества (Mathematical Proceedings of the Cambridge Philosophical Society). — 1974. — Т. 76 , № 3 . — С. 521 . — doi : .
  • Reisel, H. = Prime Numbers and Computer Methods for Factorization. — 2-е изд. — USA: Springer, 2012. — С. 183. — 464 с. — ISBN 978-0-8176-8297-2 .
  • Robert W. Floyd. // J. ACM. — 1967. — Т. 14 , вып. 4 . — С. 636–644 . — ISSN . — doi : .


Источник —

Same as Ро-алгоритм Полларда