В математике и компьютерной алгебре факторизация многочлена состоит в разложении его в произведение неприводимых множителей . Такое разложение теоретически возможно и является единственным для многочленов с коэффициентами в любом поле , но для вычисления факторизации с помощью алгоритма необходимы довольно сильные ограничения на поле коэффициентов . На практике алгоритмы были разработаны только для многочленов с коэффициентами в конечном поле , в поле рациональных чисел или в конечно порожденном расширении поля одного из них.
Все алгоритмы факторизации, включая случай многомерных полиномов над рациональными числами, сводят задачу к этому случаю; см. факторизация полиномов . Она также используется для различных приложений конечных полей, таких как теория кодирования ( циклические избыточные коды и коды BCH ), криптография ( криптография с открытым ключом с помощью эллиптических кривых ) и вычислительная теория чисел .
Поскольку сведение факторизации многомерных многочленов к факторизации одномерных многочленов не имеет никакой специфики в случае коэффициентов в конечном поле, в данной статье рассматриваются только многочлены с одной переменной.
Теория конечных полей, истоки которой можно проследить до работ Гаусса и Галуа , сыграла свою роль в различных областях математики. Благодаря применимости этой концепции в других разделах математики и наук, таких как информатика, интерес к конечным полям возродился, и это частично связано с важными приложениями в теории кодирования и криптографии . Приложения конечных полей вводят некоторые из этих разработок в криптографию , компьютерную алгебру и теорию кодирования .
Конечное поле или поле Галуа — это поле с конечным порядком (числом элементов). Порядок конечного поля всегда является простым числом или степенью простого числа. Для каждой степени простого числа q = p r существует ровно одно конечное поле с q элементами, с точностью до изоморфизма. Это поле обозначается GF ( q ) или F q . Если p — простое число, GF ( p ) — простое поле порядка p ; это поле классов вычетов по модулю p , и его p элементов обозначаются 0, 1, ..., p −1. Таким образом, a = b в GF ( p ) означает то же самое, что a ≡ b (mod p ) .
Пусть F — конечное поле. Что касается общих полей, то непостоянный многочлен f в F [ x ] называется неприводимым над F, если он не является произведением двух многочленов положительной степени. Многочлен положительной степени, не являющийся неприводимым над F , называется приводимым над F .
Неприводимые многочлены позволяют нам строить конечные поля не простого порядка. Фактически, для простой степени q пусть F q будет конечным полем с q элементами, уникальным с точностью до изоморфизма. Многочлен f степени n больше единицы, который неприводим над F q , определяет расширение поля степени n , которое изоморфно полю с q n элементами: элементы этого расширения являются многочленами степени ниже n ; сложение, вычитание и умножение на элемент F q являются таковыми для многочленов; произведение двух элементов является остатком от деления на f их произведения как многочленов; обратный элемент может быть вычислен с помощью расширенного алгоритма НОД (см. Арифметика алгебраических расширений ).
Из этого следует, что для вычисления в конечном поле не простого порядка нужно сгенерировать неприводимый многочлен. Для этого общепринятым методом является взятие многочлена наугад и проверка его на неприводимость. Для эффективности умножения в поле обычно ищут многочлены вида x n + ax + b . [ необходима цитата ] [1]
Неприводимые многочлены над конечными полями также полезны для генераторов псевдослучайных чисел, использующих регистры сдвига с обратной связью и дискретное логарифмирование по F 2 n .
Число неприводимых мономических многочленов степени n над F q равно числу апериодических ожерелий , заданных функцией подсчета ожерелий Моро M q ( n ). Тесно связанная функция ожерелья N q ( n ) подсчитывает мономические многочлены степени n , которые являются первичными (степень неприводимого); или, альтернативно, неприводимые многочлены всех степеней d, которые делят n. [2]
Многочлен P = x 4 + 1 неприводим над Q , но не над любым конечным полем.
Алгоритмы разложения полиномов используют базовые операции над полиномами, такие как произведения, деления, gcd, степени одного полинома по модулю другого и т. д. Умножение двух полиномов степени не выше n можно выполнить за O ( n 2 ) операций в F q с использованием «классической» арифметики или за O ( n log( n ) log(log( n )) ) операций в F q с использованием «быстрой» арифметики . Евклидово деление (деление с остатком) можно выполнить за те же временные рамки. Стоимость наибольшего общего делителя полиномов степени не выше n можно принять равной O ( n 2 ) операций в F q с использованием классических методов или равной O ( n log 2 ( n ) log(log( n )) ) операций в F q с использованием быстрых методов. Для многочленов h , g степени не выше n возведение в степень h q mod g можно выполнить с помощью O (log( q )) полиномиальных произведений, используя метод возведения в степень квадратным методом, то есть O ( n 2 log( q )) операций в F q с использованием классических методов или O ( n log( q )log( n ) log(log( n ))) операций в F q с использованием быстрых методов.
В приведенных ниже алгоритмах сложность выражается через количество арифметических операций в F q с использованием классических алгоритмов арифметики многочленов.
Многие алгоритмы факторизации многочленов над конечными полями включают следующие три этапа:
Важным исключением является алгоритм Берлекэмпа , который объединяет этапы 2 и 3.
Алгоритм Берлекэмпа исторически важен как первый алгоритм факторизации, который хорошо работает на практике. Однако он содержит цикл по элементам основного поля, что подразумевает, что он применим только для небольших конечных полей. Для фиксированного основного поля его временная сложность полиномиальна, но для общих основных полей сложность экспоненциальна по размеру основного поля.
Алгоритм определяет факторизацию без квадратов для многочленов, коэффициенты которых берутся из конечного поля F q порядка q = p m , где p — простое число. Этот алгоритм сначала определяет производную , а затем вычисляет наибольший общий делитель многочлена и его производной. Если он не равен единице, то наибольший общий делитель снова делится на исходный многочлен, при условии, что производная не равна нулю (случай, который существует для непостоянных многочленов, определенных над конечными полями).
Этот алгоритм использует тот факт, что если производная многочлена равна нулю, то это многочлен от x p , то есть, если коэффициенты принадлежат F p , p -я степень многочлена, полученного заменой x на x 1/ p . Если коэффициенты не принадлежат F p , p -й корень многочлена с нулевой производной получается той же заменой x , завершенной применением инверсии автоморфизма Фробениуса к коэффициентам.
Этот алгоритм работает также над полем нулевой характеристики , с той лишь разницей, что он никогда не входит в блоки инструкций, где вычисляются корни p -й степени. Однако в этом случае алгоритм Юня гораздо эффективнее, поскольку он вычисляет наибольшие общие делители многочленов меньших степеней. Следствием этого является то, что при факторизации многочлена по целым числам не используется следующий алгоритм: сначала вычисляется факторизация без квадратов по целым числам, а для факторизации полученных многочленов выбирается p таким образом, чтобы они оставались бесквадратными по модулю p .
Алгоритм : SFF (разложение на множители без квадратов) Вход : Монический многочлен f от F q [ x ], где q = p m Выход : Разложение на множители без квадратов f R ← 1 # Сделайте w произведением (без кратности) всех множителей f , которые имеют # кратность не делится на p c ← gcd ( f , f ′) w ← f / c # Шаг 1: Определить все множители в w i ← 1 while w ≠ 1 do y ← gcd ( w , c ) fac ← w / y R ← R · fac i w ← y ; c ← c / y ; i ← i + 1 end while # c теперь является произведением (с кратностью) оставшихся множителей f # Шаг 2: Определите все оставшиеся факторы с помощью рекурсии # Обратите внимание, что это множители f , кратность которых делится на p, если c ≠ 1, то c ← c 1/ p R ← R · SFF ( c ) p end if Выход ( Р )
Идея состоит в том, чтобы определить произведение всех неприводимых множителей f с одинаковой кратностью. Это делается в два шага. Первый шаг использует формальную производную f для нахождения всех множителей с кратностью, не делящейся на p . Второй шаг определяет оставшиеся множители. Поскольку все оставшиеся множители имеют кратность, делящуюся на p , то есть они являются степенями p , можно просто взять квадратный корень степени p и применить рекурсию.
Позволять
разложить по полю с тремя элементами.
Алгоритм сначала вычисляет
Так как производная не равна нулю, то w = f / c = x 2 + 2 , и мы входим в цикл while. После одного цикла мы имеем y = x + 2 , z = x + 1 и R = x + 1 с обновлениями i = 2 , w = x + 2 и c = x 8 + x 7 + x 6 + x 2 + x +1 . Второй раз через цикл дает y = x + 2 , z = 1 , R = x + 1 , с обновлениями i = 3 , w = x + 2 и c = x 7 + 2 x 6 + x + 2. Третий раз через цикл также не меняет R. Для четвертого раза через цикл мы получаем y = 1 , z = x + 2 , R = ( x + 1)( x + 2) 4 , с обновлениями i = 5 , w = 1 и c = x 6 + 1 . Так как w = 1, то выходим из цикла while. Так как c ≠ 1 , то это должен быть идеальный куб. Кубический корень из c , полученный заменой x 3 на x, равен x 2 + 1 , а рекурсивный вызов процедуры освобождения от квадратов определяет, что он является свободным от квадратов. Поэтому, возводя его в куб и объединяя со значением R до этой точки, получаем свободное от квадратов разложение
Этот алгоритм разбивает свободный от квадратов многочлен на произведение многочленов, неприводимые множители которых имеют одинаковую степень. Пусть f ∈ F q [ x ] степени n — многочлен, который нужно разложить на множители.
Алгоритм Факторизация с разной степенью (DDF) Вход : Монический бесквадратный многочлен f ∈ F q [ x ] Выход : Множество всех пар ( g , d ) таких, что f имеет неприводимый множитель степени d и g является произведением всех моноических неприводимых множителей f степени d . Begin while do if g ≠ 1 , then ; end if i := i + 1; end while ; if , then ; if , then return {( f , 1)} , else return S End
Корректность алгоритма основана на следующем:
Лемма. Для i ≥ 1 многочлен
является произведением всех монических неприводимых многочленов в F q [ x ], степень которых делит i .
На первый взгляд, это неэффективно, поскольку подразумевает вычисление НОД многочленов степени, которая экспоненциальна по степени входного многочлена. Однако,
может быть заменен на
Поэтому нам необходимо вычислить:
есть два метода:
Метод I. Начнем со значения
вычисленный на предыдущем шаге и вычислить его q -ю степень по модулю нового f* , используя возведение в степень методом возведения в квадрат. Для этого необходимо
арифметические операции в F q на каждом шаге, и таким образом
арифметические операции для всего алгоритма.
Метод II. Используя тот факт, что q -я степень является линейным отображением над F q , мы можем вычислить ее матрицу с помощью
операций. Затем на каждой итерации цикла вычисляем произведение матрицы на вектор (с O (deg( f ) 2 ) операций). Это влечет за собой общее количество операций в F q , которое равно
Таким образом, этот второй метод более эффективен и обычно предпочтителен. Более того, матрица, которая вычисляется в этом методе, используется большинством алгоритмов для факторизации равной степени (см. ниже); таким образом, использование ее для факторизации различной степени экономит дополнительное время вычислений.
В этом разделе мы рассмотрим факторизацию монического бесквадратного одномерного многочлена f степени n над конечным полем F q , который имеет r ≥ 2 попарно различных неприводимых множителей, каждый степени d .
Сначала мы описываем алгоритм Кантора и Зассенхауса (1981), а затем вариант, который имеет немного лучшую сложность. Оба являются вероятностными алгоритмами, время работы которых зависит от случайного выбора ( алгоритмы Лас-Вегаса ), и имеют хорошее среднее время работы. В следующем разделе мы описываем алгоритм Шоупа (1990), который также является алгоритмом факторизации с равной степенью, но является детерминированным. Все эти алгоритмы требуют нечетного порядка q для поля коэффициентов. Для получения дополнительных алгоритмов факторизации см., например, книгу Кнута « Искусство программирования», том 2.
Алгоритм Алгоритм Кантора–Цассенхауза. Вход: Конечное поле F q нечетного порядка q . Монический свободный от квадратов многочлен f в F q [ x ] степени n = rd , который имеет r ≥ 2 неприводимых множителей, каждый из которых имеет степень d. Вывод: множество монических неприводимых множителей f . Факторы := { f }; пока Размер(Факторы) < r do , Выбрать h в F q [ x ] с deg( h ) < n случайным образом; для каждого u в Factors с deg( u ) > d сделать , если gcd( g , u ) ≠ 1 и gcd( g , u ) ≠ u , то Factors := Factors ; endif endwhile Факторы возврата
Корректность этого алгоритма основана на том факте, что кольцо F q [ x ]/ f является прямым произведением полей F q [ x ]/ f i , где f i работает на неприводимых множителях f . Поскольку все эти поля имеют q d элементов, компонент g в любом из этих полей равен нулю с вероятностью
Это означает, что многочлен gcd( g , u ) является произведением множителей g, для которых компонент g равен нулю.
Было показано, что среднее число итераций цикла while алгоритма меньше , что дает среднее число арифметических операций в F q , равное . [3]
В типичном случае, когда d log( q ) > n , эта сложность может быть уменьшена до
выбрав h в ядре линейного отображения
и замена инструкции
к
Доказательство валидности такое же, как и выше, заменяя прямое произведение полей F q [ x ]/ f i на прямое произведение их подполей с q элементами. Сложность разлагается на для самого алгоритма, для вычисления матрицы линейного отображения (которая может быть уже вычислена в бесквадратной факторизации) и O ( n 3 ) для вычисления ее ядра. Можно отметить, что этот алгоритм работает также, если множители имеют не одинаковую степень (в этом случае количество множителей r , необходимое для остановки цикла while, находится как размерность ядра). Тем не менее, сложность немного лучше, если бесквадратная факторизация выполняется перед использованием этого алгоритма (поскольку n может уменьшаться при бесквадратной факторизации, это снижает сложность критических шагов).
Как и алгоритмы предыдущего раздела, алгоритм Виктора Шупа является алгоритмом факторизации с равной степенью. [4] В отличие от них, это детерминированный алгоритм. Однако на практике он менее эффективен, чем алгоритмы предыдущего раздела. Для алгоритма Шупа входные данные ограничены полиномами над простыми полями F p .
Худшая временная сложность алгоритма Шупа имеет фактор Хотя эта сложность экспоненциальна, она намного лучше, чем у предыдущих детерминированных алгоритмов (алгоритм Берлекэмпа), которые имеют p в качестве фактора. Однако существует очень мало полиномов, для которых время вычисления является экспоненциальным, а средняя временная сложность алгоритма является полиномиальной в где d — степень полинома, а p — число элементов основного поля.
Пусть g = g 1 ... g k — искомая факторизация, где g i — различные монические неприводимые многочлены степени d . Пусть n = deg( g ) = kd . Рассмотрим кольцо R = F q [ x ]/ g и обозначим также через x образ x в R . Кольцо R является прямым произведением полей R i = F q [ x ]/ g i , а через p i обозначим естественный гомоморфизм из R на R i . Группа Галуа поля R i над F q является циклической порядка d , порожденной автоморфизмом поля u → u p . Отсюда следует, что корни g i в R i равны
Как и в предыдущем алгоритме, этот алгоритм использует ту же подалгебру B из R , что и алгоритм Берлекэмпа , иногда называемую «подалгеброй Берлекэмпа» и определяемую как
Подмножество S множества B называется разделяющим множеством , если для каждого 1 ≤ i < j ≤ k существует s ∈ S такое, что . В предыдущем алгоритме разделяющее множество строится путем случайного выбора элементов S . В алгоритме Шупа разделяющее множество строится следующим образом. Пусть s в R [ Y ] таково, что
Тогда является разделяющим множеством, поскольку для i = 1, ..., k (два монических многочлена имеют одинаковые корни). Поскольку g i попарно различны, для каждой пары различных индексов ( i , j ) по крайней мере один из коэффициентов s h будет удовлетворять
При наличии разделяющего множества алгоритм Шупа действует так же, как и последний алгоритм предыдущего раздела, просто заменяя инструкцию «выбрать случайный h в ядре линейного отображения » на «выбрать h + i, где h из S , а i из {1, ..., k −1}».
Как было описано в предыдущих разделах, для факторизации над конечными полями существуют рандомизированные алгоритмы полиномиальной временной сложности (например, алгоритм Кантора–Цассенхауза). Существуют также детерминированные алгоритмы с полиномиальной средней сложностью (например, алгоритм Шупа).
Существование детерминированного алгоритма с полиномиальной сложностью в худшем случае все еще остается открытой проблемой.
Как и алгоритм факторизации с различной степенью, алгоритм Рабина [5] основан на лемме, изложенной выше. Алгоритм факторизации с различной степенью проверяет каждое d , не превышающее половину степени входного полинома. Алгоритм Рабина использует то преимущество, что для рассмотрения меньшего количества d множители не нужны . В остальном он похож на алгоритм факторизации с различной степенью. Он основан на следующем факте.
Пусть p 1 , ..., p k , будут всеми простыми делителями n , и обозначим , для 1 ≤ i ≤ k многочлен f из F q [ x ] степени n неприводим в F q [ x ] тогда и только тогда , для 1 ≤ i ≤ k , и f делит . Фактически, если f имеет множитель степени, не делящий n , то f не делит ; если f имеет множитель степени, делящий n , то этот множитель делит по крайней мере один из
Алгоритм Тест на неприводимость Рабина Вход : Монический многочлен f от F q [ x ] степени n , p 1 , ..., p k все различные простые делители n . Выход : Либо « f неприводим», либо « f приводим». для j = 1 до k сделать ; для i = 1 до k сделать ; g := gcd( f , h ); если g ≠ 1, то вернуть " f является приводимым" и СТОП ; конец для ; ; если g = 0, то вернуть " f является неприводимым", иначе вернуть " f является приводимым"
Основная идея этого алгоритма заключается в вычислении, начиная с наименьшего путем повторного возведения в квадрат или использования автоморфизма Фробениуса , а затем взятии соответствующего НОД. Используя элементарную полиномиальную арифметику, вычисление матрицы автоморфизма Фробениуса требует операций в F q , вычисление
требует O ( n 3 ) дополнительных операций, а сам алгоритм требует O ( kn 2 ) операций, что дает в общей сложности операций в F q . Используя быструю арифметику (сложность для умножения и деления, а также для вычисления НОД), вычисление путем повторного возведения в квадрат составляет , а сам алгоритм составляет , что дает в общей сложности операций в F q .