Автор работы: Пользователь скрыл имя, 12 Декабря 2011 в 07:33, реферат
Прежде чем приступать к факторизации целого числа, следует убедиться, что оно действительно составное. Для этого лучше всего использовать один из вероятностных тестов на простоту, например, алгоритм Миллера—Рабина.
Введение………………………………………………………………………………………………………3
Метод Ферма………………………………………………………………………………………………...4
(P− 1)-метод Полларда………………………………………………………………………………...7
p-метод Полларда……………………………………………………………………………………….11
Метод Шермана—Лемана…………………………………………………………………………..14
Алгоритм Ленстры…………………………………………………………………………………….18
Алгоритм Полларда—Штрассена……………………………………………………………….26
(P+ 1)-метод Уильямса и его обобщения……………………………………………………28
Методы Шэнкса………………………………………………………………………………………….30
Заключение………………………………………………………………………………………………...31
Список используемой литературы……………
Итак,
мы достигнем в алгоритме точки (x
(P− 1)-метод Полларда.
Он основан на следующей идее. Допустим, что у числа n, которое мы хотим разложить на множители, есть простой делитель p такой, что число p − 1 является B-степенно-гладким для некоторой границы гладкости B > 0. Это означает, что для любого простого числа q, q | p − 1,
выполнено
неравенство
qvq
(p−1) ≤B.
Отсюда
следует, что p
− 1 |НОК(1, 2, . . . , B).
Если мы выберем a
∈ N такое,
что (a,
n) = 1, то
по малой теореме Ферма
aНОК(1,2,.
. . ,B) ≡1 (mod p).
Следовательно, НОД(aНОК(1,2,.
. . ,B) − 1, n) делится
на p и поэтому содержит
нетривиальный делитель n (НОД может быть и равен n).
1 стадия (P −1)-метода Полларда.
В
(P − 1)-методе Полларда мы выбираем
априорную границу гладкости B, исходя из возможностей
нашего компьютера и времени, которое
мы рассчитываем потратить. Обычно
B = 105—106. Далее составляем
таблицу q1
< q2 < ...<
qk ≤ B
всех простых чисел, не превосходящих B,
и для каждого qi полагаем
,
т.е. qiβ(qi)≤B,
qiβ(qi)+1>B
Далее
мы выбираем значение a (например, a=
2). Затем
последовательными возведениями в степень
и приведениями по модулю
n вычисляем
(параметр 20
также априорный). Далее вычисляем НОД(P20,
n). Если
этот НОД тривиальный, то добавляем к P20 следующее произведение
длины 20, т. е. находим
снова
считаем НОД(P40,
n) и так
далее. Предположим, что при некотором k
≥ 1 оказалось,
что НОД(P20k,
n) > 1.
Тогда мы возвращаемся к значению k −1 и начинаем последовательно
вычислять наибольшие общие делители
до первого нетривиального общего делителя.
Значение
нахождения P20,
P40, P60,
. . . состоящих из порций по 20 степеней
простых чисел, состоит именно в экономии
на вычислениях наибольшего общего делителя.
Заметим, что поскольку количество простых
чисел qi не обязано делится
на 20, то последняя порция
может быть неполной.
2 стадия (P − 1)-метода Полларда.
Предположим,
что p
| n, p
− 1 не
является B-степенно-гладким
числом, но p
−1 =f * r,
где f
— B-степенно-гладкое
число и r — простое число, B
< r < B1.
Допустим, что на 1 - й стадии (P
− 1)-метода
Полларда мы вычислили
b
=aНОК(1,2,. . . ,B)
(mod n).
Тогда br ≡1 (mod p), и НОД(br −1 (mod n), n) будет делиться на p по малой теореме Ферма.
Поэтому на 2 стадии (P − 1)-метода Полларда мы находим все простые числа r1 , . . . , rN, B < r1 < r2 < ...<rN < B1, и составляем разности di = ri − ri−1, i=2, . . . , N. Эти разности обычно невелики и количество различных таких разностей также невелико (при подходящем выборе B1). Затем мы табулируем элементы bdi (mod n) для всех различных
значений di.
После
этого в алгоритме мы находим
x1
≡br1 (mod
n),
после
чего вычисляем
xi ≡bri (mod n) ≡ xi−1 * bdi (mod n), i= 2, . .., N,
и
находим
НОД(xi
−1 (mod n), n), i=1, . . . , N.
Здесь также возможна организация вычислений порциями по 20 для экономии количества нахождений наибольших общих делителей.
Замечание 1. Оценка сложности (P −1)-метода Полларда в худшем случае составляет O(n1/2 logc n) арифметических операций. Однако в некоторых случаях алгоритм может быстро выдать делитель числа n. Во всех случаях алгоритм хорошо находит небольшие простые делители n, потому что они являются степенно-гладкими для небольшой границы гладкости B.
Замечание 2. Если какой-либо из вычисляемых в алгоритме наибольших общих делителей оказался равным n, то имеет смысл попробовать другое основание a, например, a= 3.
На практике (P − 1)-метод Полларда обычно используют
до применения более сильных алгоритмов факторизации для того, чтобы
отделить небольшие простые делители числа n.
p-метод
Полларда.
С его помощью было разложено на множители число Ферма
F8 = 2256 + 1.
Схема p-метода.
На входе задано число n ∈ N, которое мы хотим разложить на множители.
1
шаг. Выбрать отображение
f
: Z/nZ −→ Z/nZ.
Обычно f (x) —многочлен степени большей или равной 2, например, f (x) = x2 +1.
2
шаг. Случайно выбрать x0
∈ Z/nZ и
вычислять члены рекуррентной последовательности x0,
x1, x2,
. . . по правилу
xi
≡ f (xi−1) (mod
n).
3
шаг. Для некоторых номеров j,
k проверять
условие
1<НОД(xj
−xk, n)
<n
до тех пор, пока не будет найден делитель числа n, или пока не закончится время, отведенное для работы алгоритма.
Конец алгоритма.
Замечание 3. Выбор номеров j, k на третьем шаге алгоритма обычно делают одним из следующих способов.
1. Для каждого j перебирают все k, k < j; это долго, и требуется большая память компьютера.
2.
Рассматривают пары k и 2k, т. е. проверяют
условие
3. Если j заключено в пределах 2h ≤ j < 2h+1, где h ∈ N, то полагают k = 2h − 1.
Замечание 4. Основная идея p-метода очень проста. Если период последовательности xi(mod n) может быть порядка n, то период последовательности xi(mod p) для простого делителя p числа n не превосходит p. Это значит, что xj и xk могут быть различными по модулю n, но совпадать по модулю p, т.е. p | НОД(xj −xk, n).
Утверждение 1. Пусть S — фиксированное множество из r элементов, f — какое-либо отображение f : S→S, x0 ∈ S, последовательность x0, x1, x2, . . . определяется соотношением xj = f (xj−1). Пусть λ > 0, l = 1 + [√2λr] < r. Тогда доля тех пар (f, x0) (где f пробегает все отображения из S в S и x0 пробегает все множество S), у которых x0, x1, x2, . . . ,xl попарно различны, среди всех пар (f, x0) не превосходит e−λ.
Информация о работе Факторизация целых чисел с экспоненциальной сложностью