Факторизация целых чисел с экспоненциальной сложностью

Автор работы: Пользователь скрыл имя, 12 Декабря 2011 в 07:33, реферат

Описание

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

Содержание

Введение………………………………………………………………………………………………………3
Метод Ферма………………………………………………………………………………………………...4
(P− 1)-метод Полларда………………………………………………………………………………...7
p-метод Полларда……………………………………………………………………………………….11
Метод Шермана—Лемана…………………………………………………………………………..14
Алгоритм Ленстры…………………………………………………………………………………….18
Алгоритм Полларда—Штрассена……………………………………………………………….26
(P+ 1)-метод Уильямса и его обобщения……………………………………………………28
Методы Шэнкса………………………………………………………………………………………….30
Заключение………………………………………………………………………………………………...31
Список используемой литературы……………

Работа состоит из  1 файл

реферат.docx

— 166.91 Кб (Скачать документ)

     Следствие 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. Тогда                                     bi = bi−2 − qibi−1 < 0, и даже bi < bi−2.

     Лемма 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 

Информация о работе Факторизация целых чисел с экспоненциальной сложностью