Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Методы факторизации



Пусть N натуральное составное число. Требуется найти натуральные числа , для которых . Эта задача носит название задачи факторизации числа N. Следует заметить, что задача распознавания является ли данное число составным или простым сравнительно легко решается с помощью вероятностных тестов простоты типа Монте-Карло.

Теорема о распределении простых чисел. Пусть число простых чисел не превосходящих x. Например, =4 при х=10 (простые числа {2,3,5,7}). Оказывается простых чисел достаточно много.

Теорема о распределении простых чисел, доказанная в 1896 году Адамаром и независимо Валле Пуссеном, утверждает, что

при ,

то есть

,

Величина дает хорошее приближение к даже при небольших n. Например, при n=109 погрешность приближения не превосходит 6%. Асимптотический закон позволяет оценить вероятность, с которой целое число, наугад выбранное из отрезка от 1 до n, является простым. Эта вероятность примерно равна 1/ln(n). В частности, для выбора простого числа нужно проверить на простоту в среднем проверить ln(n) случайно и равновероятно выбранных чисел. Например, чтобы найти простое число из 100 десятичных знаков, надо перебрать порядка ln10100≈230 случайных чисел от 1 до 10100. Заметим, что можно облегчить вычисления проверкой на простоту лишь нечетных чисел. Полезно также знать, что число десятичных знаков во взятом случайно и равновероятно числе из множества {1,2,3,…,10100}c большой вероятностью близко к 100. Точнее, около 90% всех чисел имеют 100 знаков, 99,9% имеют 98 и более знаков.

Перебор делителей для определения простоты числа. Мы хотим узнать, является ли заданное число N простым? Известно, что разложение числа N на простые множители единственно. Здесь p1<p2<…<pr и ei – натуральные числа. Таким образом, задача состоит в том, чтобы узнать, состоит ли это разложение из единственного простого числа p1.

Самый простой способ проверки – перебор делителей. Если N составное число, то N имеет простой делитель . Пытаемся разделить nна 2, 3,...,[ ] (чётные числа, большие 2 пропускаются). Если п не делится ни на одно из этих чисел, то оно простое. При этом можно исключить деление на составные числа. Так как при , то число делений N на простые числа до вычисления факторизации N не больше величины . При этом учитывают два обстоятельства. Во-первых, деление является сравнительно сложной операцией. Во-вторых, не известен эффективный способ построения последовательных простых чисел, кроме решета Эратосфена. А реализация этого метода требует большого объема памяти. Поэтому на практике для того, чтобы избежать многих лишних делений делят число N на числа из арифметических прогрессий

,

где произведение r первых простых чисел и . Конечно, сначала делят N на числа . Этот метод в раз быстрее, чем деление на все натуральные числа , так как в таком методе производится не более делений.

Псевдопростые числа. Достаточное условие не простоты числа N.

Обозначим через (Z/N)+ множество всех ненулевых вычетов по модулю N, а через (Z/N)* мультипликативную группу вычетов кольца (Z/N).

Если число N простое, то

Z+ = Z*.

Число N называется псевдопростым по основанию а из (Z/N)+, если выполнено утверждение малой теоремы Ферма:

аN-1=1(modN).

Любое простое число Nявляется псевдопростым по любому основанию а Поэтому если удается найти основание а (Z/N)+, по которому Nне является псевдопростым, то число N – составное. На практике оказывается, что во многих случаях достаточно проверить основание а =2.

Итак, если 2N-1≠1(modN), то N – составное число, в противном случае оно псевдопростое и возможно простое.

Оказывается, псевдопростые числа часто являются простыми числами.

Так:

· среди первых чисел до 10000 имеется только 22 «плохих чисел», то есть 22 псевдопростых числа по основанию 2 не являющихся простыми (первые из 22 «плохих» чисел: 341, 561, 645, 1105,…);

· доля «плохих» чисел среди к-значных стремится к нулю при к стремящимся к бесконечности;

· Доля составных чисел среди 50-разрядных псевдопростых по основанию 2 чисел (доля «плохих») не превосходит 10-6, а среди 100 разрядных (доля «плохих») не превосходит 10-13.

Для более точной проверки псевдопростого числа по модую 2 на простоту естественно использовать и другие модули. Но это не всегда помогает. Дело в том, что существуют так называемые числа Кармайкла – составные числа являющиеся псевдопростыми по любому основанию а из (Z/N)+. Числа Кармайкла встречаются очень редко. Первые из них это:561,1105, 1729. Их всего 255 среди первых 108 натуральных чисел.

Тест Миллера-Рабина проверки числа на простоту. Напомним, что решение уравнения х2=1, не сравнимое с 1 и -1 по модулю N, называется нетривиальным квадратным корнем из 1 в кольце Z/N. Несложно доказывается, что если Z/N содержит нетривиальный корень из 1, то N – составное число. Действительно, если N=P простое число и для а Z/N и а2=1 modP, то а2=сP+1, то есть (а+1)(а-1)=сP. Это равенство не может выполняться при а {2,3,..,P-2}.

Тест Миллера-Рабина это вероятностный алгоритм проверки простоты числа N. Он проверяет соотношение

аN-1=1(modN),

для нескольких значений а из (Z/N)+. Возводя а последовательно в степени тест проверяет не обнаруживается ли нетривиальный квадратный корень из 1 по модулю N. Если обнаруживается квадратичный корень, то тест прекращает работу с выводом, что N составное число. Тест также прекращает работу, если найдено а, при котором N не является псевдопростым. Для выработки чисел а из (Z/N)+ используется генератор случайных чисел. Число итераций теста s (число используемых а) фиксируется заранее.

Число а называют «удачным свидетелем», если тест при данном а сделал вывод о том, что N составное число. Ниже мы приводим утверждения о том, что для любого составного числа N не менее половины всех возможных а позволяет установить, что N – составное число. Точнее, среди элементов (Z/N)+ не менее (N-1)/2 являются свидетелями того, что N составное число. Таким образом, вероятность выбора удачного свидетеля (для составного N) превышает 0,5. Следовательно, вероятность принять составное число за простое за s итераций в тесте Миллера-Рабина не превышает . Более точно, Для нечетного N и для любого целого положительного s вероятность ошибки теста Миллера-Рабина не превосходит .

r-метод Полларда факторизации чисел. Выбирается многочлен над кольцом вычетов . Единственное требование к многочлену заключается в том, чтобы легко вычислялись его значения. Далее выбирают случайный вычет и вычисляют последовательность вычетов по правилу

, , ….., , …

На i -ом шаге вычисляют пару элементов последовательности. Далее вычисляют .

Возможны два варианта.

Если d=1, то вычисляют следующую пару .

Если , , то и – факторизация числа N.

Если d=N, то выбирают новое случайное или новый многочлен , и повторяют весь алгоритм с самого начала.

При естественных предположениях доказывается, что число шагов алгоритма есть величина .

Идея доказательства состоит в следующем. Пусть N имеет делитель . Рассматривается последовательность вычетов . Видно, что элементы этой последовательности связаны соотношением . Предполагается, что последовательность выбирается независимо с равными вероятностями из . Тогда (см. § 6.5) число шагов до первого совпадения знаков последовательности оценивается сверху величиной с вероятностью при любом . Если это событие произошло, то минимальное i такое, что также не превосходит k. При этом показывается, что вероятность одновременного выполнения другого события очень мала, если конечно N не является степенью p. Пренебрегая этой вероятностью, получают

,

.

Значит, . Таким образом, в алгоритме требуется вычислять не более = элементов последовательности (так как ).

p-1 метод Полларда. Напомним предварительно некоторые понятия. Пусть – множество первых простых чисел, не превосходящих В. Множество SB называется факторной базой. Из закона распределения простых чисел следует, что

.

Число x называется В-гладким, если оно разлагается в произведение простых чисел из факторной базы SB.

Фиксируют параметр метода B>0. Полагают , где . Другой вариант выбора Т: . Метод заключается в реализации следующих двух шагов.

Шаг 1. Выбирают случайный вычет и вычисляют , .

Шаг 2. Вычисляют . Если , то увеличивают В. Если , то переходят к шагу 1 и выбирают новое а. Если для нескольких случайных а выполняется , то уменьшают В. Если , то и – факторизация числа N.

Замечают, что если р – простой делитель N и (p-1) – В-гладкое число, то . Действительно, если , то . Тогда, очевидно, и по малой теореме Ферма . Поэтому p делит .

Если для нескольких случайных а, то для любого простого делителя q числа N число q-1 является В-гладким. В этом случае уменьшают В с тем, чтобы суметь различить p и q.

Сложность метода определяется сложностью вычисления вычета . В случае применения бинарного метода возведения в степень получают оценку

умножений по mod N. Известно, что сложность умножения по mod N, как и сложность вычисления оценивается величиной двоичных операций.

Индекс-метод (метод случайных квадратов, алгоритм Диксона). Индекс – метод основан на вычислении вычетов , для которых . Показывают, что если N – нечетное составное число и для случайных выполнено , то с вероятностью не меньшей выполнено . Таким образом, в среднем надо найти не более двух пар таких вычетов для разложения N на множители.

Выбирают некоторое натуральное число В, параметр метода. Определяют – множество первых простых чисел, не превосходящих В. Значение параметра В выбирается таким образом, чтобы минимизировать сложность алгоритма.

Входные данные алгоритма. Нечетное составное число N.

Выходные данные алгоритма. Числа , для которых .

Шаг 1. Выбирают значение параметра В.

Шаг 2. Выбирают случайный вычет x, и вычисляют . Если , то и – факторизация числа N. Если , то выбирают другое x. Если , то вычисляют , .

Шаг 3. Проверяют число b на В-гладкость. Если b является В-гладким, то вычисляют каноническое разложение . Запоминают строку .

Повторяют шаг 2 и шаг 3 до тех пор, пока число найденных строк не превысит , где с – некоторая небольшая константа.

Шаг 4. Пусть , , все полученные на предыдущих шагах разложения и – соответствующие этим разложениям строки неотрицательных целых чисел. Находят нетривиальную линейную комбинацию этих строк, которая дает нулевую строку по mod 2:

, (1)

. Полагают

,

.

По построению . Далее вычисляют . Если при этом не будет найдена факторизация N, то вычисляют другую нетривиальную линейную комбинацию (1). Всего таких комбинаций оказывается не менее . Если ни одна из них не приводит к факторизации N, то находят несколько новых разложений на шаге 2 и шаге 3 и повторяют шаг 4 с новыми строками до получения факторизации числа N. Алгоритм заканчивает свою работу.

Замечание.

1) Один из способов проверки В-гладкости вычетов b заключается в пробных делениях на простые числа и их степени .

2) Линейную комбинацию (1) можно вычислить, решив, например, систему линейных уравнений по mod 2 методом Гаусса.

3) Асимптотическая сложность алгоритма при оптимальном выборе натурального числа В равна (эта сложность набора системы линейных сравнений).

Развитие индекс-метода. Направления развития индекс-метода для факторизации больших целых чисел те же, что и направления развития индекс-метода для логарифмирования в простом поле. Рассмотрим здесь кратко метод непрерывных дробей и метод квадратичного решета. Тот и другой методы основаны на уменьшении величины чисел, проверяемых на гладкость на шаге 3 индекс – метода. Кроме того, метод квадратичного решета вместо пробных делений использует так называемую процедуру просеивания, которая значительно быстрее находит гладкие значения многочлена, в нашем случае квадратичного.

Метод непрерывных дробей. Замечено, что если научиться находить много таких , что вычет окажется по абсолютной величине существенно меньше N, например, (a – константа), то индекс – метод заработает значительно быстрее, так как при таком ограничении на b возрастет вероятность В-гладкости . Требуемые вычеты () получают исходя из того, что необходимые x ищут среди числителей подходящих дробей чисел . Для этого для небольших значений к=1,2,… вычисляют подходящие дроби числа , используя рекуррентный способ вычисления подходящих дробей квадратичных иррациональностей доказывают, что

.

Таким образом, в индексе – методе проводят следующее изменение. Вместо случайных x выбирают . Тогда, положив , получают

, .

Общая сложность такого алгоритма равна

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

.

Заметим, что в методе непрерывных дробей факторная база заметно меньше по размеру факторной базы первоначального варианта индекс – метода ( против ).

Идея метода квадратичного решета. Положим и . Доказывают, что . Рассматривают выражение

.

Показывают, что при справедлива оценка . При этом оказывается, что L небольшая по сравнению с N величина. Для случая, когда F(c) есть В-гладкое значение, то есть , получают сравнение

. (2)

Такие сравнения используются полностью аналогично случаю исходного индекс – метода. Для поиска В-гладких значений многочлена F(c) обычно применяют процедуру просеивания. Так как степень многочлена F(c) равна двум, то данный метод факторизации получил название метода квадратичного решета.

Матрица, составленная из строк показателей, с которыми простые q входят в разложение (2), является разреженной. Поэтому, для вычисления соотношения (1) применяют алгоритм Видемана или какой-либо другой метод решения разреженных систем. При

,

при любом фиксированном доказывают, что выполняется неравенство

, (3)

где – вероятность В-гладкости числа F(c) при . Считают трудоемкость выполнения шага 4 индекс – метода. В итоге общая сложность алгоритма квадратичного решета выражается величиной при любом фиксированном .





Дата публикования: 2015-02-22; Прочитано: 973 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.018 с)...