Автор работы: Пользователь скрыл имя, 12 Декабря 2011 в 07:33, реферат
Прежде чем приступать к факторизации целого числа, следует убедиться, что оно действительно составное. Для этого лучше всего использовать один из вероятностных тестов на простоту, например, алгоритм Миллера—Рабина.
Введение………………………………………………………………………………………………………3
Метод Ферма………………………………………………………………………………………………...4
(P− 1)-метод Полларда………………………………………………………………………………...7
p-метод Полларда……………………………………………………………………………………….11
Метод Шермана—Лемана…………………………………………………………………………..14
Алгоритм Ленстры…………………………………………………………………………………….18
Алгоритм Полларда—Штрассена……………………………………………………………….26
(P+ 1)-метод Уильямса и его обобщения……………………………………………………28
Методы Шэнкса………………………………………………………………………………………….30
Заключение………………………………………………………………………………………………...31
Список используемой литературы……………
Следствие
2. Приведено описание схемы алгоритма
Ленстры для проверки простоты натуральных
чисел. Оценка сложности этого алгоритма
зависит от начальных простых чисел p1,
. . . , pl,
таких, что
Теорема 2 позволяет уменьшить количество простых чисел p1, . . . , pl и ослабить это неравенство до s> n1/3. Затем на последней стадии алгоритма проверки простоты нам придется восстанавливать возможные делители числа n по остаткам rj (mod s).
Это усовершенствование на практике позволяет ускорить работу алгоритма проверки простоты чисел.
Мы докажем здесь теорему 2 лишь частично. А именно, мы полностью опишем алгоритм нахождения всех ri ≡r (mod s) и докажем оценку сложности. Доказательство того, что таких делителей может быть не более 11 .
Замечание 6. Можно доказать, что для любой постоянной α , , существует постоянная c(α) > 0 такая, что при 1 ≤ r < s<n, (r, s) = 1, s > n, существует не более c(α) положительных делителей числа n, сравнимых с r по модулю s. Однако полиномиальный алгоритм для их нахождения пока неизвестен.
Алгоритм.
На входе заданы числа r, s, n ∈ N, удовлетворяющие условиям теоремы.
1 шаг. С помощью обобщенного алгоритма Евклида найти r' ∈ N, r*r ≡1 (mod s). Найти r’ такое, что r’ ≡ r*n (mod s), 0 ≤ r’ <s.
2
шаг. Для очередного значения I
= 0, 1, 2, . .. найти
числа ai,
bi, ci по следующим правилам:
a0 = s, b0 =0, c0 = 0,
a1
≡ r’r* (mod s), 0< a1
≤s, b1 =
1, c1 ≡
*r* (mod s)
и
при i≥2
ai
= ai−2 −
qiai−1,
bi = bi−2
− qibi−1,
ci ≡ ci−2
−qici−1
(mod s).
Здесь целые числа qi однозначно определяются условиями
0≤ai <ai−1 при i четном,
0<
ai ≤ai−1 при i нечетном.
Фактически, qi—частное от деления ai−2 на ai−1, за исключением случая, когда i нечетно и остаток от деления равен нулю. Отметим, что ai монотонно не возрастают и на четных номерах — убывают.
3
шаг. Для очередного набора ai,
bi, ci найти все целые
числа c, удовлетворяющие
условиям c=
ci (mod s),
|c|< s, если i четное,
2aibi
≤ c≤ n +aibi, если i нечетное.
Таких c будет не более двух; для четного i это очевидно, а для нечетных i мы докажем это ниже.
4
шаг. Для каждого c из шага 3 решить
в целых числах систему уравнений
Если x и y окажутся неотрицательными целыми числами, то добавить xs+ r к списку искомых делителей.
5 шаг. Если ai = 0, то алгоритм заканчивает работу. Иначе возвращаемся на шаг 2 к следующему значению i.
Конец алгоритма.
Замечание
7. Систему линейных уравнений, возникающую
на 4 шаге алгоритма, можно свести к одному
квадратному уравнению. Положим
u= ai (xs +r), v = bi (ys+r’).
Тогда
uv
= naibi,
u +v = s(aix
+biy) +air+
bir’ = cs+
air+ bir’,
т.
е. числа u и v являются корнями
многочлена
T2
− (cs+ air
+ bir’)T
+ aibin.
Эти корни должны быть целыми числами, одно из которых делится на ai, а другое—на bi. Поскольку мы работаем с большими целыми числами, на практике многократное извлечение корня из дискриминанта для нахождения корней многочлена является достаточно трудоемким.
Замечание 8. Обозначим через t номер, для которого at =0. Поскольку ai получается с помощью алгоритма Евклида, примененного к a0 = s и a1, a1 ≤ s, то очевидно, что t = O(log s). Кроме того, по определению чисел ai номер t четен.
Лемма
2. Числа ai,
bi обладают
следующими свойствами:
1. ai >0, bi > 0 для нечетных i, 0 < i<t;
2. ai ≥0, bi ≤ 0, (ai, bi) (0, 0) для четных i, 0≤i≤t;
3. bi+1ai
− ai+1bi
= (−1)i ·s для 0
≤i <t.
Доказательство. Свойство 1 для i=1, свойства 2 и 3 для i =0 выполняются по определению a0, b0, a1 и b1. Дальнейшее доказательство проведем по индукции.
Свойство
3 следует из соотношения
bi+2ai+1
− ai+2bi+1
= (bi −
qi+2bi+1)ai+1
− (ai −
qi+2ai+1)bi+1
= −(bi+1ai
− ai+1bi).
Неравенства ai > 0 для нечетных i и ai ≥ 0 для четных i следуют из определения ai, а неравенство (ai, bi) (0, 0) следует из свойства3.
Докажем неравенства для bi.
Если i
нечетно, то i<
t. Тогда
bi
= bi−2 −
qibi−1
> 0,
поскольку bi−2 > 0 и bi−1 ≤ 0 по предположению индукции и числа qi неотрицательны по определению. Точнее, в этом случае справедливо более сильное неравенство: bi ≤ bi−2.
Пусть i
четно, i
≤ t. Тогда
по предположению индукции bi−2
≤ 0,
bi−1 >
0, и здесь qi —настоящее частное,
т. е. qi
≥ 1. Тогда
Лемма
3. Пусть ai,
bi, t
— числа из алгоритма. Пусть x,
y ∈ R≥0,
γ∈ R>0.
Тогда найдется номер i,
0≤ i≤t,
такой, что либо
-γs<
xai +ybi
<_s,
если
i четно,
либо
2γaibi
≤ xai
+ybi ≤xy/γ+γaibi, если i нечетно.
Доказательство.
Если x=
y=0, то утверждение
леммы очевидно. Пусть далее x или y отлично от нуля.
Поскольку по лемме 2
Информация о работе Факторизация целых чисел с экспоненциальной сложностью