Ро-алгоритм Полларда: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
м →‎Литература: дополнение
м →‎Литература: дополнение
Строка 167: Строка 167:
|издательство = Academic Press
|издательство = Academic Press
|год = 2007
|год = 2007
|том = 3
|страницы = 238
|страницы = 238
|страниц = 771
|страниц = 771
Строка 186: Строка 185:
|doi = 10.1017/S0305004100049252
|doi = 10.1017/S0305004100049252
|ref = Поллард-1974
|ref = Поллард-1974
}}
* {{книга
|автор = Reisel, H.
|заглавие = Простые числа и компьютерные методы факторизации
|оригинал = Prime Numbers and Computer Methods for Factorization
|ссылка = http://books.google.ru/books?id=94DaZuVETzIC
|издание = 2-е изд
|место = USA
|издательство = Springer
|год = 2012
|страницы = 183
|страниц = 464
|isbn = 978-0-8176-8297-2
|ref = Reisel
}}
}}



Версия от 18:38, 30 ноября 2012

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

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

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

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

В конце 60х годов 20 века Роберт Флойд придумал дочтаточно эффективный алгоритм поиска длины цикла в последовательности, также известный, как алгоритм "черепаха и заяц".[1] Джон Поллард, Дональд Кнут и другие математики проанализировали поведение этого алгоритма в среднем случае. Было предложено несколько модификаций и улучшений алгоритма.

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

В 1981 году Ричард Брент и Джон Поллард с помощью алгоритма нашли наименьшие делители чисел Ферма при .[4] Так, , где - простое число, состоящее из 62 десятичных цифр.

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

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

Неформальное описание

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

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

Формальное описание

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

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

Как на практике выбирать функцию ? Функция должна быть не слишком сложной для вычисления, но в то же время не должна быть линейным многочленом, а также не должна порождать взаимно однозначное отображение. Обычно в качестве берут функцию или .[8] Однако, не следует использовать функции и .[6]

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

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

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

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

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

Поэтому, нет необходимости проверять все пары , а можно ограничиться парами вида , где , и пробегает набор последовательны значений 1, 2, 3, ..., а принимает значения из интервала . Например, , , а .[7] Эта идея была предложена Ричардом Брентом[2] в 1980 году и позволяет уменьшить количество выполняемых операций приблизительно на 25%.[9]

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

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

Пусть , , .

ixiyiНОД(|xiyi|, 8051)
15261
22674741
367787197

Таким образом, 97 - нетривиальный делитель числа 8051. Используя другие варианты полинома , можно также получить делитель 83.

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

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

Теорема. (Парадокс дней рождения)

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

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

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

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

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

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

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

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

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

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

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

 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));
 }

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

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

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

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

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

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

Литература

  • Ишмухаметов Ш. Т. Методы факторизации натуральных чисел: Учебное пособие. — Казань: Казанский Университет, 2011. — С. 61-64. — 190 с.
  • О.Н. Василенко. Теоретико-числовые алгоритмы в криптографии. М.: МЦНМО, 2003.
  • Ю.П. Соловьев, В.А. Садовничий, Е.Т. Шавгулидзе, В.В. Белокуров. Эллиптические кривые и современные алгоритмы теории чисел. Москва – Ижевск: Институт компьютерных исследований, 2003.
  • Brent, Richard P. (1980), "An Improved Monte Carlo Factorization Algorithm" (PDF), BIT, 20: 176—184, doi:10.1007/BF01933190
  • Childs, Lindsay N. Congruences // Введение в высшую алгебру = Concrete Introduction to Higher Algebra. — 3-е изд. — USA: Springer, 2009. — С. 471-473. — 603 с. — ISBN 978-0-387-74725-5.
  • Koshy T. Congruences // Элементарная теория чисел и ее приложения = Elementary Number Theory with Applications. — 2-е изд. — USA: Academic Press, 2007. — С. 238. — 771 с. — ISBN 9780123724878.
  • Pollard J. M. Методы факторизации и проверка простоты. (англ.) = Theorems on factorization and primality testing. // Математические Труды Кэмбриджского Философского Общества (Mathematical Proceedings of the Cambridge Philosophical Society). — 1974. — Т. 76, № 3. — С. 521. — doi:10.1017/S0305004100049252.
  • Reisel, H. Простые числа и компьютерные методы факторизации = Prime Numbers and Computer Methods for Factorization. — 2-е изд. — USA: Springer, 2012. — С. 183. — 464 с. — ISBN 978-0-8176-8297-2.

См. также

Примечания

  1. Floyd describes algorithms for listing all simple cycles in a directed graph in a 1967 paper: Floyd, R.W. (1967), "Non-deterministic Algorithms", J. ACM, 14 (4): 636—644, doi:10.1145/321420.321422. However this paper does not describe the cycle-finding problem in functional graphs that is the subject of this article. An early description of the tortoise and hare algorithm appears in Knuth, Donald E. (1969), The Art of Computer Programming, vol. II: Seminumerical Algorithms, Addison-Wesley, exercises 6 and 7, page 7. Knuth (p.4) credits Floyd for the algorithm, without citation.
  2. 1 2 *Brent, Richard P. (1980), "An Improved Monte Carlo Factorization Algorithm" (PDF), BIT, 20: 176—184, doi:10.1007/BF01933190
  3. Thomas Koshy. Elementary Number Theory with Applications. ISBN: 9780123724878; 2010 г. — С. 238 — 800 с.
  4. Childs, Lindsay N. A Concrete Introduction to Higher Algebra. — 3rd ed., 2009, 603 c. [1]
  5. 1 2 Richard Brent. Some parallel algorithms for integer factorization. 1999.&mdash - С. 7 PDF
  6. 1 2 3 *Pollard, J. M. (1975), "A Monte Carlo method for factorization", BIT Numerical Mathematics, 15 (3): 331—334 [2]
  7. 1 2 3 4 5 Ишмухаметов Ш. Т. Методы факторизации натуральных чисел: Учебное пособие. — Казань: Казанский Университет, 2011. — С. 61-64. — 190 с. [3]
  8. Н.Ю. Золотых. Лекции по компьютерной алгебре. Лекция 11. ρ-метод Полларда.
  9. Riesel, Hans. Selected Areas in Cryptography. Prime Numbers and Computer Methods for Factorization. 2nd ed. 2012 — С. 83-84. — с. 464. Предпросмотр на Google Книги.
  10. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. "Introduction to Algorithms", Third Edition, 2009. Section 31.9. Integer Factorization. Pollard's rho heuristic. — с. 976 — С. 901
  11. Richard E. Crandall. Parallelization of Polldar-rho factorization. 1999. PDF