Опубликован: 04.03.2008 | Доступ: свободный | Студентов: 1644 / 55 | Оценка: 4.56 / 3.67 | Длительность: 30:07:00
ISBN: 978-5-9556-0099-4
Специальности: Программист, Математик
Лекция 7:

Алгоритмы Кронекера. Разложение на множители, свободные от квадратов. Факторизация

< Лекция 6 || Лекция 7: 12345 || Лекция 8 >

Разложение на множители, свободные от квадратов

Разложение многочлена на множители начнем с приведения его к некоторому каноническому виду. Прежде всего найдем НОД его коэффициентов, эта величина называется содержанием многочлена f и обозначается \textrm{cont}(f). Далее разложим многочлен f на свободные от квадратов множители , т. е. на такие множители, которые являются произведениями взаимно простых неприводимых многочленов в первой степени. Это можно сделать путем дифференцирования исходного многочлена и нахождения общих делителей многочлена и его производной. Свободный от квадратов многочлен, содержание которого равно 1, назовем примитивным.

В принятых нами обозначениях алгоритм факторизации многочлена f принимает следующий вид.

А18. АЛГОРИТМ (факторизовать_многочлен).

\begin{equation}\\
\text{\textbf{Дано:}\quad $f\in\mathbb Z[x]$ }\\
\text{\textbf{Надо:}  \qquad  $\textrm{cont}(f)$- содержание многочлена  $f$} \\
\text{\qquad \qquad   \qquad $U$-  разложение}\\
\text{\textbf{Переменные:}\quad
        $G$-  разложение на свободные от квадратов} \\
\text{\qquad \qquad \qquad \qquad   $V$-  разложение текущего многочлена из  $G$}
\\
\text{\textbf{Обозначения}:\quad $s == G.\text{число\_множителей}$}\\
\text{\qquad \qquad \qquad \qquad  $g == G.\text{множители}$}\\
\text{\qquad  \qquad \qquad \qquad $u == U.\text{множители}$} \\
\text{ \qquad \qquad \qquad \qquad  $v == V.\text{множители}$}\\
\textbf{Начало} \\
\text{$u.$начать работу }\\ 
\text{вычислить} \textrm{cont}$(f)$ }\\  
\text{$f(x) := f(x)/$}\textrm{cont}$(f)$ \\
разложить\_на\_свободные\_от\_квадратов  $(f,G)}$\\
 \text{\qquad \qquad \qquad \qquad $f(x) = g_1 (x)g_2^2(x)\dots g_s^s(x),$}\\
\textbf{цикл для}  $i$ \textbf{от} 1 \textbf{до}  $s$ \\
\text{\qquad \qquad факторизовать примитивный, свободный от квадратов  $(g_i,
v)$}\\
\text{\qquad \qquad $u$.добавить  $v^i$}\\
\textbf{конец цикла}\\
\textbf{Конец}
\end{equation}

Вычисление содержания многочлена сводится к вычислению наибольшего общего делителя целых чисел. Поскольку мы предполагаем коэффициенты не слишком большими, вполне достаточно ограничиться алгоритмом Евклида нахождения НОД.

Разложение примитивного (без нетривиальных общих делителей коэффициентов) многочлена на свободные от квадратов множители осуществляется следующим образом.

А19. АЛГОРИТМ (разложить_на_свободные_от_квадратов).

\begin{equation}\\
 \text{Дано:\quad $f(x)\in\mathbb Z[x]$; $\textrm{cont}(f)=1$ }\\
\text{Надо:\qquad $G$-разложение }\\
\text{Переменные:\quad $h$, $c$, $d\in\mathbb Z[x]$} \\
\text{\qquad \quad \quad \quad  \quad \quad $k\in\mathbb N$} \\
\text{Обозначения:\quad   $s == G.$число\_множителей}  \\
\text{\qquad \quad \quad \quad \quad \quad $g == G.$множители} \\
\text{Начало} \\
\text{$h(x) := \GCD(f(x), f'(x))$, где $f'(x)=df(x)/dx$} \\
\text{$c(x) := f(x)/h(x)$} \\
\text{$d(x) := (df(x)/dx)/h(x) - dc(x)/dx$} \\
\text{$k    := 1$} \\
\text{цикл пока $c(x)\ne 1$}\\
\text{\qquad $g_k(x) := \GCD (c(x), d(x))$}\\
\text{\qquad $c(x)    := c(x)/g_k(x)$}\\
\text{\qquad $d(x)    := d(x)/g_k(x) - dc(x)/dx$}\\
\text{\qquad $k       := k+1$}\\
\text{конец цикла} \\
\text{$s  := k-1$ }\\
\text{Конец}
\end{equation}

Для доказательства корректности этого алгоритма предположим, что f=\prod\limits_{i=1}^s g_i^i, где g_i свободны от квадратов и взаимно просты. Тогда h =\smash[t]{\prod\limits_{i=2}^s} g_i^{i-1}, до начала цикла

\begin{align*}
  c(x)&=\prod_{i=1}^s g_i,\\
  \frac{f'}h&= \sum_{i=1}^s\biggl(ig'_i\prod_{j=1,j\ne i}^s g_j\biggr), \\
  d&=\sum_{i=1}^s \biggl((i-1) g'_i\prod_{j=1,j\ne i}^s g_j \biggr).
\end{align*}

В теле цикла выполняется присваивание многочленам c(x) и d(x) значений

\begin{align*}
  c(x)&=\prod_{i=k+1}^sg_i,   &\qquad
  d&=\sum_{i=k+2}^s\biggl((i-k-1) g'_i\cdot\prod_{j=k+1,j\ne i}^s g_j\biggr).
\end{align*}

15.1. УПРАЖНЕНИЕ. Построить аналог алгоритма A19 для многочленов с коэффициентами из поля F_p.

Алгоритмы разложения на неприводимые множители примитивного свободного от квадратов многочлена с целыми коэффициентами составляют главное содержание данной лекции.

Современные алгоритмы разложения примитивного свободного от квадратов многочлена f(x) \in \mathbb Z(x) на неприводимые множители основаны на следующих соображениях. Кольцо целых чисел \mathbb Z вкладывается в полное нормированное поле \mathbb K. Предполагается, что мы умеем раскладывать на множители многочлены из кольца \mathbb K[x], т. е. для любого наперед заданного числа \eps>0 можем вычислить с абсолютной точностью \eps коэффициенты всех неприводимых делителей данного многочлена (предполагается некоторая нормировка делителей, например, равенство единице старшего коэффициента). Каждому неприводимому в \mathbb K[x] делителю h(x) многочлена f(x) соответствует однозначно определенный неприводимый в \mathbb Z[x] делитель g(x) многочлена f(x), который делится на h(x) (более точно, g(x) представляет собой произведение нескольких неприводимых в \mathbb K[x] делителей многочлена f(x), если, конечно, сам h(x) не принадлежит \mathbb Q[x] ). Для нахождения неприводимого в \mathbb Z[x] делителя многочлена f(x) либо используют перебор произведений различных подмножеств неприводимых в \mathbb K[x] делителей многочлена f(x), либо для восстановления g(x) по h(x) пользуются следующим методом. Ограничивают возможную степень многочлена g(x) положительным числом m ; выделяют свободный \mathbb Z -модуль ранга m+1 в модуле многочленов с целыми коэффициентами степени не выше m, в котором должен находиться искомый многочлен g(x), в частности, выделенный модуль может совпадать со всем множеством многочленов степени не выше m, вкладывают этот модуль в евклидово пространство над полем \mathbb Q так, чтобы многочлену g(x) соответствовал кратчайший вектор в выделенном модуле, называемом обычно решеткой, и находят этот кратчайший вектор.

< Лекция 6 || Лекция 7: 12345 || Лекция 8 >
Марина Подлевских
Марина Подлевских

Пожалуйста, проясните ситуацию. Был выбран курс " Компьютерная алгебра" для самостоятельного изучения. Как теперь записаться на этот курс с целью получения диплома о повышении квалификации? На данный момент он имеет статус " изучаю". Если я пройду экзаменационный тест в таком статусе без оформления документов и оплаты диплома, придется ли еще раз регистрироваться на этот курс и заново проходить тестирование?