P-1 метод Полларда

Поделись знанием:
(перенаправлено с «P-1 алгоритм»)
Перейти к: навигация, поиск

P-1 метод Полларда (читается как п-1 метод Полларда) — один из методов факторизации целых чисел.

Метод был впервые опубликован британским математиком Джоном М. Поллардом[en] в 1974 году в статье журнала Математические Труды Кэмбриджеского Философского Общества[en][1].

Исторически, именно появление данного алгоритма привелоОшибка Lua : attempt to index local 'entity' (a nil value). к изменению понятия сильного простого числа, используемого в криптографии, нестрого говоря, простого числа, для которого <math> p-1 </math> имеет достаточно большие делители. В современных криптосистемах стараютсяОшибка Lua : attempt to index local 'entity' (a nil value). использовать именно сильные простые числа, так как это повышает стойкость используемых алгоритмов и систем в целом.





Определения и математические сведения

  • Определение: Число называется <math>B</math>-гладкостепенным[en][2], если все его простые делители, в степенях, в которых они входят в разложение этого числа <math> p^{\nu} </math>, удовлетворяют <math> p^{\nu} \leq B </math>.
  • Согласно малой теореме Ферма для любого простого числа <math>p</math> и для любого целого числа <math>a</math>, такого что <math>a </math> и <math>p </math> взаимно просты, или, что в данном случае равносильно, <math>p </math> не делит <math>a </math>, справедливо:
<math>a^{(p-1)} \equiv 1 \mod p </math>, более того <math>\forall M=(p-1)l, l \in N \Rightarrow a^M \equiv 1 \mod p </math>.

Оригинальный алгоритм (1974 год)

Джон Поллард впервые опубликовал описанный ниже алгоритм в своей статье «Методы факторизации и проверка простоты» («Theorems of Factorization and Primality Testing») в 1974 году в журнале Труды Кэмбриджеского Философского Общества[1]. Статья посвящена теоретической оценке сложности факторизации большого числа <math> N</math> или же, в случае простого <math> N</math>, проверке его на простоту. Нижеприведённый алгоритм явился следствием и иллюстрацией теоретических выкладок Полларда.

Первая стадия

  1. Задача состоит в том, чтобы найти собственный делитель числа <math>N</math> отличный от единицы. Прежде всего необходимо выбрать два числа <math>B, M,</math> такие, что <math> 1<B<M<\sqrt{N}, M<B^2 </math>.
  2. Вычислим теперь число <math>M(B) = \prod_{k=1}^{m} p_k^{c_k}</math>, где <math>p_k</math> — все простые числа меньшие <math>B </math>. Здесь допускается некоторая свобода в выборе <math>c_k</math>, однако точно известно, что для маленьких <math>p_k</math>, <math>c_k</math> должно быть больше единицы[1].
  3. Выберем небольшое целое <math>a>1</math> и вычислим
<math>b = a^{M(B)} \mod N </math>
<math> q = (b-1, N) </math> если <math>q \ne 1</math> мы нашли делитель <math> N </math>, в противном случае переходим ко второй стадии.

Вторая стадия

  • На этом шаге необходимо вычислить последовательность
<math> F_m \equiv b^{m-1} - 1 \mod N </math> где <math>m</math> — простое, <math>B < m < M </math>, надеясь, что на каком-нибудь шаге получится
<math> g_m = (F_m, N) > 1 </math>
  • Легче всего[1] это сделать вычислением <math>b^m</math> для каждого нечётного <math>m</math> домножением на <math>b^2</math>, беря <math>G_i = (b^i,N)</math> через равные промежутки. Если <math>1 < G_i < N </math> делитель найден. Если же <math>G_i = N, G_{i-1} = 1 </math>, то необходимо точнее исследовать этот участок.

Замечание

С помощью данного метода мы сможем найти только такие простые делители <math>p </math> числа <math>N</math>, для которых выполнено[1]:

<math>p-1 = A</math> или <math>p-1 = Aq </math>, где <math>A</math> является <math>B</math>-гладкостепенным, а <math>q</math> — простое, такое что <math>B<q<M</math>[1].

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

Эта переработанная по сравнению с оригинальной версия алгоритма использует понятия степенной гладкости[en] и ориентирована на практическое применение. Значительные изменения претерпела первая стадия, в то время, как вторая сохранилась практически без изменений, опять же, с теоретической точки зрения, ничего значительного, по сравнению предыдущей версией, добавлено не было. Именно приведённый ниже алгоритм имеют в виду, когда говорят о «методе Полларда»[3][4].

Первая стадия

  1. Пусть <math>N </math> <math>B</math>-гладкостепенное, и требуется найти делитель числа <math>N</math>. В первую очередь вычисляется число <math>M(B) = \prod_i p_i^{k_i} </math> где произведение ведётся по всем простым <math>p_i</math> в максимальных степенях <math>k_i: p_i^{k_i}<B </math>
  2. Тогда искомый делитель <math>q = (b - 1, N) </math>[3], где <math>b = a^{M(B)} \mod N</math>.
  • Возможно два случая, в которых приведенный выше алгоритм не даст результата[4].
  1. В случае, когда <math>(b - 1, N) = N</math> точно можно сказать, что у <math>n</math> есть делитель, являющийся <math>B</math>-гладкостепенным и проблему должен решить иной выбор <math>a</math>.
  2. В более частом случае, когда <math>(b - 1, N) = 1</math> стоит перейти ко второй стадии алгоритма, которая значительно повышает вероятность результата, хотя и не гарантирует его.

Пример

Пусть <math>N = 10 001 </math> выберем <math>B = 10 </math>, тогда <math>M(B) = 2^3 \cdot 3^2 \cdot 5 \cdot 7 = 2520</math>, возьмём <math>a = 2 </math> и вычислим теперь <math>b = a^{M(B)} \mod N = 2^{2520} \mod 10001 = 3578 </math>, и наконец <math>(b - 1, N) = (2^{2520} - 1, 10 001) = 73 </math>.

Замечания

  • При больших <math>B</math> число <math>M(B)</math> может оказаться весьма большим, сравнимым по значению с <math>B!</math>, в таких случаях может оказаться целесообразно разбить <math>M(B)</math> на множители приблизительно одинаковой величины <math>M(B) = \prod_i M_i</math> и вычислять последовательность
<math>a_1 = a^{M_1} \mod N;</math>
<math>a_{k+1} = a_k^{M_{k+1}} \mod N</math>.

Вторая стадия

  • Прежде всего необходимо зафиксировать границы <math>B_1 = B, B_2 \gg B</math>, обычно <math>B_2 \leq B^2</math>[4][3].
  • Вторая стадия алгоритма находит делители <math>N</math>, такие что <math>p-1 = q \cdot A</math>, где <math>A</math> — <math>B</math>-гладкостепенное, а <math>q</math> простое, такое что <math>B_1<q<B_2 </math>.
  1. Для дальнейшего нам потребуется вектор из простых чисел <math>q_i</math> от <math>B_1</math> до <math>B_2</math>, из которого легко получить вектор разностей между этими простыми числами <math>D = (D_1,D_2, ...), D_i = q_{i+1} - q_i</math>, причём <math>D_i</math> — относительно небольшие числа, и <math>D_i \in \Delta</math>, где <math>\Delta</math> — конечно множество[3]. Для ускорения работы алгоритма полезно предварительно вычислить все <math>b^{\delta_i}, \forall \delta_i \in \Delta</math>[3] и при пользоваться уже готовыми значениями.
  2. Теперь необходимо последовательно вычислять <math>c_0 = b_{1} \mod N, c_i = c_{i-1}^{\delta_i} \mod N</math>, где <math>b_{1} = a^{M(B_1)}\mod N</math>, вычисленное в первой стадии, на каждом шаге считая <math>G = (c_i-1, N)</math>. Как только <math>G \neq 1 </math>, можно прекращать вычисления.

Условия сходимости

  • Пусть <math>p</math> наименьший делитель <math>N</math>, <math>q^t = max(q_i^{t_i})</math> максимум берется по всем степеням <math>q_i^{t_i}</math>, делящим <math>p-1</math>[3].
    • Если <math>q^t < B_1</math>, то делитель будет найден на первой стадии алгоритма[3].
    • В противном случае для успеха алгоритма необходимо, чтобы <math>q^t < B_2</math>, а все остальные делители <math>p-1</math> вида <math>q^r</math> были меньше <math>B_1</math>[3].

Модификации и улучшения

  • Позднее сам Поллард высказал мнение о возможности ускорения алгоритма с использованием быстрого преобразования Фурье[3] во второй стадии, однако он не привел реальных способов, как сделать это[5].
  • Ещё позже, в 1990 году это сделали математики Питер Монтгомери (Peter Montgomery) и Роберт Силверман (Robert Silverman)[5]. Авторам удалось добиться увеличения скорости исполнения второй стадии алгоритма.

Оценка эффективности

  • Сложность первой стадии оценивается как <math>O(B \cdot \ln B \cdot (\ln N)^2 + (\ln N)^3)</math>, оставляя только слагаемое высшего порядка получаем оценку первой стадии алгоритма[3] <math>O(B \cdot \ln B \cdot (\ln N)^2)</math>.
  • Согласно оценке Монтгомери, сложность второй стадии, с точностью до слагаемых наивысшего порядка составляет <math>O(\pi (B_2))</math>[1][3], где <math>\pi (s)</math> — число простых чисел, меньших <math>s</math>. Оценка Чебышева дает приближённое равенство <math>\pi (s) \approx \frac{s}{\ln s}</math>.

Рекорды

На данный момент (10.10.2016) три самых больших простых делителя, найденных методом P-1, состоят из 66, 64 и 59 десятичных цифр[6].

Кол-во цифр p Делитель числа Кем найден Когда найден B B2
66 672038771836751227845696565342450315062141551559473564642434674541
= 22 · 3 · 5 · 7 · 17 · 23 · 31 · 163 · 401 · 617 · 4271 · 13681 · 22877 · 43397 · 203459 · 1396027 · 6995393 · 13456591 · 2110402817 + 1
<math>960^{119}-1</math> Т. Ногара 29.06.2006 <math>10^8</math> <math>10^{10}</math>
64 1939611922516629203444058938928521328695726603873690611596368359
= 2 · 3 · 11 · 1187 · 9233729 · 13761367 · 43294577 · 51593573 · 100760321 · 379192511 · 2282985164293 + 1
<math>10^{243}-4\cdot10^{121}-1</math> М. Тервурен 13.09.2012 <math>10^{9}</math> <math>10^{13}</math>
59 12798830540286697738097001413455268308836003073182603569933
= 22 · 17 · 59 · 107 · 113 · 20414117 · 223034797 · 269477639 · 439758239 · 481458247 · 1015660517 + 1
<math>8069000260399979023963141^{17}-1</math> A. Круппа 30.06.2011 <math>10^9</math> <math>10^{10}</math>

Применения

  • [gforge.inria.fr/projects/ecm/ GMP-ECM] (англ.) — Пакет включает в себя эффективное применение P-1 метода.
  • Prime95 (англ.) и MPrime (англ.) — официальные клиенты GIMPS используют метод, чтобы отсеять кандидатов.

См. также

Напишите отзыв о статье "P-1 метод Полларда"

Примечания

  1. 1 2 3 4 5 6 7 Pollard, 1974.
  2. Василенко, 2003, с. 60.
  3. 1 2 3 4 5 6 7 8 9 10 11 Ишмухаметов, 2011, с. 53-55.
  4. 1 2 3 Cohen, 2000, pp. 439.
  5. 1 2 Montgomery, Silverman, 1990.
  6. Циммерман, Поль. [members.loria.fr/PZimmermann/records/Pminus1.html Record Factors Found By Pollard's p-1 Method] (англ.). Les pages des personnels du LORIA et du Centre Inria NGE.

Литература

  • Ошибка Lua : attempt to index local 'entity' (a nil value).
  • Ошибка Lua : attempt to index local 'entity' (a nil value).
  • Ошибка Lua : attempt to index local 'entity' (a nil value).
  • Ошибка Lua : attempt to index local 'entity' (a nil value).
  • Ошибка Lua : attempt to index local 'entity' (a nil value).

Отрывок, характеризующий P-1 метод Полларда

Событие это – оставление Москвы и сожжение ее – было так же неизбежно, как и отступление войск без боя за Москву после Бородинского сражения.
Каждый русский человек, не на основании умозаключений, а на основании того чувства, которое лежит в нас и лежало в наших отцах, мог бы предсказать то, что совершилось.
Начиная от Смоленска, во всех городах и деревнях русской земли, без участия графа Растопчина и его афиш, происходило то же самое, что произошло в Москве. Народ с беспечностью ждал неприятеля, не бунтовал, не волновался, никого не раздирал на куски, а спокойно ждал своей судьбы, чувствуя в себе силы в самую трудную минуту найти то, что должно было сделать. И как только неприятель подходил, богатейшие элементы населения уходили, оставляя свое имущество; беднейшие оставались и зажигали и истребляли то, что осталось.
Сознание того, что это так будет, и всегда так будет, лежало и лежит в душе русского человека. И сознание это и, более того, предчувствие того, что Москва будет взята, лежало в русском московском обществе 12 го года. Те, которые стали выезжать из Москвы еще в июле и начале августа, показали, что они ждали этого. Те, которые выезжали с тем, что они могли захватить, оставляя дома и половину имущества, действовали так вследствие того скрытого (latent) патриотизма, который выражается не фразами, не убийством детей для спасения отечества и т. п. неестественными действиями, а который выражается незаметно, просто, органически и потому производит всегда самые сильные результаты.
«Стыдно бежать от опасности; только трусы бегут из Москвы», – говорили им. Растопчин в своих афишках внушал им, что уезжать из Москвы было позорно. Им совестно было получать наименование трусов, совестно было ехать, но они все таки ехали, зная, что так надо было. Зачем они ехали? Нельзя предположить, чтобы Растопчин напугал их ужасами, которые производил Наполеон в покоренных землях. Уезжали, и первые уехали богатые, образованные люди, знавшие очень хорошо, что Вена и Берлин остались целы и что там, во время занятия их Наполеоном, жители весело проводили время с обворожительными французами, которых так любили тогда русские мужчины и в особенности дамы.
Они ехали потому, что для русских людей не могло быть вопроса: хорошо ли или дурно будет под управлением французов в Москве. Под управлением французов нельзя было быть: это было хуже всего. Они уезжали и до Бородинского сражения, и еще быстрее после Бородинского сражения, невзирая на воззвания к защите, несмотря на заявления главнокомандующего Москвы о намерении его поднять Иверскую и идти драться, и на воздушные шары, которые должны были погубить французов, и несмотря на весь тот вздор, о котором нисал Растопчин в своих афишах. Они знали, что войско должно драться, и что ежели оно не может, то с барышнями и дворовыми людьми нельзя идти на Три Горы воевать с Наполеоном, а что надо уезжать, как ни жалко оставлять на погибель свое имущество. Они уезжали и не думали о величественном значении этой громадной, богатой столицы, оставленной жителями и, очевидно, сожженной (большой покинутый деревянный город необходимо должен был сгореть); они уезжали каждый для себя, а вместе с тем только вследствие того, что они уехали, и совершилось то величественное событие, которое навсегда останется лучшей славой русского народа. Та барыня, которая еще в июне месяце с своими арапами и шутихами поднималась из Москвы в саратовскую деревню, с смутным сознанием того, что она Бонапарту не слуга, и со страхом, чтобы ее не остановили по приказанию графа Растопчина, делала просто и истинно то великое дело, которое спасло Россию. Граф же Растопчин, который то стыдил тех, которые уезжали, то вывозил присутственные места, то выдавал никуда не годное оружие пьяному сброду, то поднимал образа, то запрещал Августину вывозить мощи и иконы, то захватывал все частные подводы, бывшие в Москве, то на ста тридцати шести подводах увозил делаемый Леппихом воздушный шар, то намекал на то, что он сожжет Москву, то рассказывал, как он сжег свой дом и написал прокламацию французам, где торжественно упрекал их, что они разорили его детский приют; то принимал славу сожжения Москвы, то отрекался от нее, то приказывал народу ловить всех шпионов и приводить к нему, то упрекал за это народ, то высылал всех французов из Москвы, то оставлял в городе г жу Обер Шальме, составлявшую центр всего французского московского населения, а без особой вины приказывал схватить и увезти в ссылку старого почтенного почт директора Ключарева; то сбирал народ на Три Горы, чтобы драться с французами, то, чтобы отделаться от этого народа, отдавал ему на убийство человека и сам уезжал в задние ворота; то говорил, что он не переживет несчастия Москвы, то писал в альбомы по французски стихи о своем участии в этом деле, – этот человек не понимал значения совершающегося события, а хотел только что то сделать сам, удивить кого то, что то совершить патриотически геройское и, как мальчик, резвился над величавым и неизбежным событием оставления и сожжения Москвы и старался своей маленькой рукой то поощрять, то задерживать течение громадного, уносившего его вместе с собой, народного потока.


Элен, возвратившись вместе с двором из Вильны в Петербург, находилась в затруднительном положении.
В Петербурге Элен пользовалась особым покровительством вельможи, занимавшего одну из высших должностей в государстве. В Вильне же она сблизилась с молодым иностранным принцем. Когда она возвратилась в Петербург, принц и вельможа были оба в Петербурге, оба заявляли свои права, и для Элен представилась новая еще в ее карьере задача: сохранить свою близость отношений с обоими, не оскорбив ни одного.
То, что показалось бы трудным и даже невозможным для другой женщины, ни разу не заставило задуматься графиню Безухову, недаром, видно, пользовавшуюся репутацией умнейшей женщины. Ежели бы она стала скрывать свои поступки, выпутываться хитростью из неловкого положения, она бы этим самым испортила свое дело, сознав себя виноватою; но Элен, напротив, сразу, как истинно великий человек, который может все то, что хочет, поставила себя в положение правоты, в которую она искренно верила, а всех других в положение виноватости.
В первый раз, как молодое иностранное лицо позволило себе делать ей упреки, она, гордо подняв свою красивую голову и вполуоборот повернувшись к нему, твердо сказала:
– Voila l'egoisme et la cruaute des hommes! Je ne m'attendais pas a autre chose. Za femme se sacrifie pour vous, elle souffre, et voila sa recompense. Quel droit avez vous, Monseigneur, de me demander compte de mes amities, de mes affections? C'est un homme qui a ete plus qu'un pere pour moi. [Вот эгоизм и жестокость мужчин! Я ничего лучшего и не ожидала. Женщина приносит себя в жертву вам; она страдает, и вот ей награда. Ваше высочество, какое имеете вы право требовать от меня отчета в моих привязанностях и дружеских чувствах? Это человек, бывший для меня больше чем отцом.]
Лицо хотело что то сказать. Элен перебила его.
– Eh bien, oui, – сказала она, – peut etre qu'il a pour moi d'autres sentiments que ceux d'un pere, mais ce n'est; pas une raison pour que je lui ferme ma porte. Je ne suis pas un homme pour etre ingrate. Sachez, Monseigneur, pour tout ce qui a rapport a mes sentiments intimes, je ne rends compte qu'a Dieu et a ma conscience, [Ну да, может быть, чувства, которые он питает ко мне, не совсем отеческие; но ведь из за этого не следует же мне отказывать ему от моего дома. Я не мужчина, чтобы платить неблагодарностью. Да будет известно вашему высочеству, что в моих задушевных чувствах я отдаю отчет только богу и моей совести.] – кончила она, дотрогиваясь рукой до высоко поднявшейся красивой груди и взглядывая на небо.
– Mais ecoutez moi, au nom de Dieu. [Но выслушайте меня, ради бога.]
– Epousez moi, et je serai votre esclave. [Женитесь на мне, и я буду вашею рабою.]
– Mais c'est impossible. [Но это невозможно.]
– Vous ne daignez pas descende jusqu'a moi, vous… [Вы не удостаиваете снизойти до брака со мною, вы…] – заплакав, сказала Элен.
Лицо стало утешать ее; Элен же сквозь слезы говорила (как бы забывшись), что ничто не может мешать ей выйти замуж, что есть примеры (тогда еще мало было примеров, но она назвала Наполеона и других высоких особ), что она никогда не была женою своего мужа, что она была принесена в жертву.
– Но законы, религия… – уже сдаваясь, говорило лицо.
– Законы, религия… На что бы они были выдуманы, ежели бы они не могли сделать этого! – сказала Элен.
Важное лицо было удивлено тем, что такое простое рассуждение могло не приходить ему в голову, и обратилось за советом к святым братьям Общества Иисусова, с которыми оно находилось в близких отношениях.
Через несколько дней после этого, на одном из обворожительных праздников, который давала Элен на своей даче на Каменном острову, ей был представлен немолодой, с белыми как снег волосами и черными блестящими глазами, обворожительный m r de Jobert, un jesuite a robe courte, [г н Жобер, иезуит в коротком платье,] который долго в саду, при свете иллюминации и при звуках музыки, беседовал с Элен о любви к богу, к Христу, к сердцу божьей матери и об утешениях, доставляемых в этой и в будущей жизни единою истинною католическою религией. Элен была тронута, и несколько раз у нее и у m r Jobert в глазах стояли слезы и дрожал голос. Танец, на который кавалер пришел звать Элен, расстроил ее беседу с ее будущим directeur de conscience [блюстителем совести]; но на другой день m r de Jobert пришел один вечером к Элен и с того времени часто стал бывать у нее.