Ряды предпочтительных чисел (в технике)
- 1 year ago
- 0
- 0
Факториза́цией натурального числа называется его разложение в произведение простых множителей . Существование и единственность (с точностью до порядка следования множителей) такого разложения следует из основной теоремы арифметики .
В отличие от задачи распознавания простоты числа, факторизация предположительно является вычислительно сложной задачей. В настоящее время неизвестно, существует ли эффективный не квантовый алгоритм факторизации целых чисел. Однако доказательства того, что не существует решения этой задачи за полиномиальное время, также нет.
Предположение о том, что для больших чисел задача факторизации является вычислительно сложной, лежит в основе широко используемых алгоритмов (например, RSA ). Многие области математики и информатики находят применение в решении этой задачи. Среди них: эллиптические кривые , алгебраическая теория чисел и квантовые вычисления .
Задача поиска эффективных способов разложения целых чисел на множители интересовала математиков с давних времён, особенно специалистов в области теории чисел . Существуют предположения о том, что Ферма был одним из первых, кто предложил метод разложения, заключающийся в том, чтобы представить число в виде разности квадратов , а затем, вычисляя , попытаться найти нетривиальный делитель . Данный способ позволяет находить два мало различающихся по величине делителя числа быстрее, чем простой перебор делителей .
Далее Лежандр обнаружил, что при таком подходе достаточно получить сравнение , и использовал для этого цепные дроби. Также Эйлером и Гауссом были предложены некоторые способы нахождения чисел, связанных этим сравнением .
Одним из ключевых моментов в развитии факторизации целых чисел было создание алгоритма RSA , что возобновило интерес учёных в данном направлении, так как имело практическое применение в области шифрования . Этот алгоритм был предложен в 1977 году тремя учёными Рональдом Ривестом , Ади Шамиром и Леонардом Адлеманом из Массачусетского технологического института и назван по первым буквам фамилий авторов методом RSA. Он основан на идее криптографии с открытым ключом и для взлома системы необходимо выполнить разложение числа на простые сомножители. На момент публикации алгоритма RSA были известны методы, которые позволяли факторизовать числа, состоящие не более чем из 25—30 цифр, а наиболее известным и применяемым все ещё оставался метод Ферма. Метод RSA позволяет факторизовать числа [ уточнить ] из 100 и более десятичных знаков. Создатели, в свою очередь, пообещали за факторизацию числа из 129 десятичных знаков символические сто долларов США .
На популярность задачи факторизации также повлияла публикация в 1977 году в журнале Scientific American Мартина Гарднера «Новый алгоритм шифрования, для взлома которого потребуются миллионы лет». Столь громкое название было воспринято в качестве вызова всему математическому сообществу. В результате этой гонки было предложено несколько новых и нестандартных идей факторизации .
Эпопея с разложением 129-значного числа завершилась в 1994 году, когда коллектив под руководством А. Ленстры , используя 1600 компьютеров, подготовил за 220 дней систему линейных уравнений , содержавшую более полумиллиона неизвестных. Решение этой системы суперкомпьютером заняло два дня. Несмотря на то, что в то время уже были известны методы решета числового поля , данный результат был получен с помощью алгоритма квадратичного решета .
Как правило, на вход таких алгоритмов подаётся число , которое необходимо факторизовать, состоящее из символов (если представлено в двоичном виде) . При этом алгоритм ищет первый простой делитель, после чего, при необходимости, можно запустить алгоритм заново для дальнейшей факторизации. Также, прежде чем начинать факторизацию большого числа, следует убедиться в том, что оно не простое. Для этого достаточно пройти тест числа на простоту. Эта задача детерминированно разрешима за полиномиальное время .
В зависимости от сложности алгоритмы факторизации можно разбить на две группы. Первая группа — экспоненциальные алгоритмы, сложность которых экспоненциально зависит от длины входящих параметров (то есть от длины самого числа в бинарном представлении). Вторая группа — субэкспоненциальные алгоритмы.
Вопрос о существовании алгоритма факторизации с полиномиальной сложностью на классическом компьютере является одной из важных открытых проблем современной теории чисел . В то же время факторизация с полиномиальной сложностью возможна на квантовом компьютере с помощью алгоритма Шора ( класс BQP ) .
Сложность или .
Один из самых простых и очевидных алгоритмов факторизации, заключающийся в том, чтобы последовательно делить факторизуемое число на натуральные числа от до . Формально достаточно делить только на простые числа в этом интервале, однако, для этого необходимо знать их множество. На практике составляется таблица простых чисел и производится проверка небольших чисел (например, до ). Для очень больших чисел алгоритм не используется в силу низкой скорости работы .
Шаг 1. Начальная установка. Присвоить (В ходе выполнения алгоритма переменные подчинены следующим условиям: и не имеет простых множителей, меньших )
Шаг 2. Если , алгоритм заканчивается.
Шаг 3. Разделить. Присвоить (Здесь и соответственно частное и остаток от деления числа на .)
Шаг 4. Остаток равен нулю? Если , то перейти к шагу 6.
Шаг 5. Множитель найден. Увеличить на и присвоить . Возвратиться к шагу 2.
Шаг 6. Частное мало? Если , увеличить на 1 и возвратиться к шагу 3.
Шаг 7. n — простое число. Увеличить на , присвоить и завершить выполнение алгоритма.
Сложность или .
Идея алгоритма заключается в поиске таких чисел и , что факторизуемое число n представимо в виде: . Как и метод пробного деления, обычно не применяется на практике для факторизации больших чисел, так как имеет экспоненциальную сложность. Метод реализуем без операции деления, а только лишь с операциями сложения и вычитания . Если , при условии того, что и — простые числа, не сильно различающиеся по величине, то метод Ферма факторизует n достаточно быстро .
Шаг 1. Начальная установка. Присвоить (Во время выполнения этого алгоритма величины x, y, r отвечают соответственно величинам в уравнении . Должно соблюдаться условие .)
Шаг 2. Выполнено? Если , то выполнение алгоритма завершается. Имеем
Шаг 3. Шаг по x. Присвоить и .
Шаг 4. Шаг по y. Присвоить и .
Шаг 5. Проверить r. Если , то возвратиться к шагу 4, иначе возвратиться к шагу 2.
Сложность .
Алгоритм Полларда является вероятностным алгоритмом, позволяющим находить делитель составного числа , работающим со сложностью, зависящей лишь от величины делителя, но не величины факторизуемого числа . Это обуславливает удобство применимости данного алгоритма в тех случаях, когда другие алгоритмы, сложность которых зависит от , становятся неэффективны . Примечателен также тем, что существует вариант реализации такого алгоритма, при котором достаточно в памяти хранить всего 3 целых числа .
Шаг 1. Выбираем небольшое число и строим последовательность чисел определяя каждое следующее по формуле:
Шаг 2. Одновременно на каждом шаге вычисляем НОД числа и всевозможных разностей , где .
Шаг 3. Когда будет найден НОД , отличный от , вычисление заканчивается. Найденное является делителем . Если не является простым числом, то процедуру можно продолжить, взяв вместо число .
Сложность .
Несмотря на относительно неплохую эффективность среди экспоненциальных алгоритмов, в алгоритме Ленстры есть необходимость неоднократно вычислять квадратный корень в одном из шагов алгоритма, что является более трудоёмким, чем сложение или вычитание .
Пусть — натуральные числа, удовлетворяющие условиям
Шаг 1. С помощью обобщённого алгоритма Евклида найти . Найти такое, что .
Шаг 2. Для очередного значения найти числа по следующим правилам:
при :
— частное от деления на , за исключением случая, когда нечётно и остаток от деления равен нулю.
Шаг 3. Для очередного выбора найти все целые числа , удовлетворяющие условиям
,
если четное,
если нечетное.
Шаг 4. Для каждого c из шага 3 решить в целых числах систему уравнений
Если и окажутся неотрицательными целыми числами, то добавить
Шаг 5. Если , то алгоритм заканчивает работу. Иначе, возвращаемся на шаг 2 к следующему значению .
Сложность .
Данный алгоритм имеет оценку сложности схожую с методом квадратичных форм Шенкса (что является наилучшей среди детерминированных алгоритмов факторизации), однако требует выделение памяти. Он может использоваться непосредственно для факторизации не очень больших целых чисел, а также в качестве вспомогательного алгоритма в субэкспоненциальном методе Диксона и для ускорения вычислений второго этапа метода факторизации с помощью эллиптических кривых .
Теорема. Пусть . Тогда для любого натурального числа наименьший простой делитель числа может быть найден за арифметических операций.
Алгоритм. Положим . Далее с помощью алгоритма теоремы найдём наименьший простой делитель числа . Поскольку делится на наименьший простой делитель числа , то алгоритм выдаст именно это число .
Гарантированная сложность и при верности гипотезы Римана .
В отличие от алгоритма Полларда - Штрассена не требует выделения больших объёмов памяти, к тому же имеет достаточно простые расчётные формулы .
Сложность .
Несмотря на экспоненциальную оценку сложности, алгоритм во всех случаях быстро находит небольшие простые делители , потому что они являются степенно-гладкими для небольшой границы гладкости . В практических задачах данный алгоритм обычно используется до применения субэкспоненциальных алгоритмов факторизации, чтобы отделить небольшие простые делители числа .
Сложность первой стадии. , где — граница
Сложность второй стадии. , где — новая граница.
Сложность .
В настоящее время алгоритм представляет скорее исторический, чем практический интерес, так как этот алгоритм был первым детерминированным алгоритмом со сложностью выполнения быстрее, чем .
Шаг 1. Для всех от до выполнять:
Если , то вернуть в качестве делителя числа m и завершить алгоритм.
Шаг 2. Для всех от до выполнять:
Шаг 3. Запустить алгоритм с уведомлением, что факторизуемое число — простое.
Для обозначения сложности принята L-нотация :
где — число подлежащее факторизации, и — некоторые константы.
Сложность .
Шаг 1. Выбрать случайное , и вычислить .
Шаг 2. Пробными делениями попытаться разложить на простые множители из факторной базы.
Шаг 3. Если является -числом, т.е.Шаг 4. Найти (например, решая с помощью алгоритма последовательного исключения неизвестных Гаусса однородную систему линейных уравнений относительно неизвестных ) соотношение линейной зависимости
Положить
Шаг 5. Проверить . Если это так, то повторить процедуру генерации. Если нет, то найдено нетривиальное разложение
Сложность .
Сложность .
Данный метод с использованием нескольких многочленов эффективен и достаточно легко реализуем на компьютере. Есть основания полагать, что он является наилучшим из известных алгоритмов факторизации для (не считая метод факторизации с помощью эллиптических кривых , который в некоторых случаях может работать быстрее. Для чисел алгоритмы решета числового поля сработают быстрее, чем метод квадратичного решета .
Сложность , где — наименьшее простое, которое делит .
Параметры выбираются случайно. Значения следует выбирать эмпирически, рассмотрев некоторую серию возрастающих значений . На практике при заданных алгоритм заключается в том, чтобы выполнить алгоритм с одной кривой. Это повторяется до тех пор, пока не разложится на множители или пока время, отведённое для алгоритма, не закончится.
Существуют модификации алгоритма, позволяющие работать с несколькими кривыми одновременно .
На вход алгоритма поступает число , которое необходимо факторизовать, параметры , зависящие от , кроме того, задаются такие, что и для выполнено условие . Алгоритм находит натуральный делитель числа .
Для каждого , полагается
А также
Пусть . Тогда лежит на эллиптической кривой над , определённой уравнением . Необходимо вычислить точку по правилам арифметики над эллиптическими кривыми. Если в ходе вычисления найден делитель числа , то разложилось на множители. Если найден , а делитель не найден, то алгоритм завершает работу и выдаёт сообщение о неудачной попытке факторизации.
В настоящее время самыми эффективными алгоритмами факторизации являются вариации решета числового поля :
Предполагаемая большая вычислительная сложность задачи факторизации лежит в основе криптостойкости некоторых алгоритмов шифрования с открытым ключом , таких как RSA . Более того, если известен хотя бы один из параметров ключей RSA, то система взламывается однозначно, кроме того, существует множество алгоритмов восстановления всех ключей в системе, обладая какими-то данными .
В марте 1994 года с помощью двойной вариации множественного полиномиального QS командой математиков под руководством Ленстры было разложено на множители 129-разрядное (428-битовое) число. Вычисления выполнялись добровольцами в Интернете — в течение восьми месяцев трудились 600 человек и 1600 компьютеров. Компьютеры соединялись по электронной почте, передавая свои результаты в центральное хранилище, где выполнялся окончательный анализ. В этих вычислениях использовались QS и теория пятилетней давности, NFS мог бы ускорить выполнение расчётов. Группа учёных сделала вывод о том, что широко используемые 512-битовые модули RSA могут быть вскрыты организацией, готовой потратить несколько миллионов долларов и подождать несколько месяцев .
С целью развития искусства разложения на множители RSA Data Security, Inc. в марте 1991 года объявило о программе RSA Factoring Challenge (состязание RSA по разложению на множители). Состязание состоит в разложении на множители ряда трудных чисел, каждое из которых является произведением двух простых чисел примерно одинакового размера. Каждое простое число было выбрано конгруэнтным 2 по модулю 3. Всего было предложено 42 числа, по одному в диапазоне от 100 до 500 разрядов с шагом в 10 разрядов (плюс одно дополнительное, 129-разрядное число. Подробнее: .