Алгоритм Ро-метода Полларда для факторизации.


Вход: n – составное число.

f(x)=x2+1 mod n.

Ш.1. x1=2, x2=2.

Ш.2. Вычислить x1=f(x1), x2=f(f(x2)).

Ш.3. Если x1=x2, то выбрать другой полином (например, f(x)=Ax2+C mod n (A, C - константы)) и снова начать алгоритм с Шага 1.

Ш.4. Вычислить d=НОД(x1—x2, n).

Ш.5. Если d=1, то вернуться на Шаг 2.

Выход: d\n.

Пример:

n=533.

x1
x2
abs(x1—x2) -
d -

 

Нашли нетривиальный делитель числа n: d=13.

Ответ: 533=13·41.

 

Замечание: Если f(x) генерирует псевдослучайную последовательность (а это так, если f(x)=Ax2+C mod n и A, B, n – попарно простые числа, то f(x) – линейный конгруэнтный генератор), то сложность данного метода составляет О( ) модулярных умножений.

Ро-метод Полларда может быть применен и для факторизации на конечном множеством многочленов.

 

2.5. p—1 – метод Полларда.

Данный метод является методом специального назначения для нахождения р - простого делителя составного числа n, для которого p—1 есть B-гладкое число.

Число a называется B-гладким, если все его простые делители не превышают B.

Идея метода заключается в следующем: зададим целое число B≤ . Возьмем какое-нибудь простое число q≤B и возведем его в такую максимально возможную целочисленную степень, чтобы результат не превышал n. Очевидно, показатель этой степени будет . Зададим число Q следующим образом:

Q= .

Если p – простой делитель числа n, для которого p—1 является B-гладким, то (p—1)\Q. Согласно теореме Ферма, для всех a: НОД(a,p)=1 выполняется aQ≡1(mod p). Поэтому если d=НОД(aQ—1,n)≠n, то d – нетривиальный делитель n. Если же d=n, то метод дает отказ.

Граница B выбирается исходя из вычислительных возможностей и априорных сведений о факторизуемом числе. На практике часто выбирают B между 105 и 106.

 

Алгоритм p—1 – метода Полларда:

Вход: n – нечетное составное число, не являющейся степенью целого числа.

Ш.1. Выбрать границу B. Составить таблицу простых чисел, меньших или равных B (если такой таблицы не имеется).

Ш.2. Выбрать случайное число a: 1<a<n. Вычислить d=НОД(a,n). Если d>1, то идти на Выход.

Ш.3. Для каждого простого q≤B вычислить l= и a=a·ql mod n.

Ш.4. Вычислить d=НОД(a—1,n).

Ш.5. Если d=1 или d=n, то отказ.

Выход: d – нетривиальный делитель n.

 

Пример.

n=5945.

Ш.1. В=10. Простые числа, меньшие 10: 2, 3, 5, 7.

Ш.2. а=17. НОД(17,5945)=1.

Ш.3.

q
l
ql mod n
a

 

a=2020.

Ш.4. d=НОД(2020, 5945)=5.

Ответ: 5945=5·1189.

 

Замечание: Сложность данного алгоритма составляет O умножений по модулю.

 



Дата добавления: 2018-11-26; просмотров: 2355;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.