Опубликован: 04.03.2008 | Уровень: профессионал | Доступ: платный
Лекция 3:

Наибольший общий делитель и последовательности полиномиальных остатков

Модулярный алгоритм вычисления НОД многочленов.

Пусть pпростое число. Любое целое число m можно рассматривать как представитель соответствующего класса вычетов по модулю p, т. е. числу m можно однозначно поставить в соответствие некоторый элемент из поля \EuScript{F}_p = \mathbb Z/p\mathbb Z. В частности, любому многочлену f(x) \in \mathbb Z[x] можно однозначно поставить в соответствие многочлен f_p(x) \in F_p[x].

Вернемся к примеру 6.7. Многочлены

\begin{align*}
  a(x)&=x^8+x^6-3x^4-3x^3+8x^2+2x-5,\\
  b(x)&=3x^6+5x^4-4x^2-9x+21.
\end{align*}

можно рассматривать как элементы кольца \EuScript F_p[x] для любого простого p. Можно вычислить их наибольший общий делитель в \EuScript F_p[x]. При этом у нас не возникнет проблем с ростом коэффициентов, поскольку мы можем пользоваться системой представителей из множества {0, 1, . . . .p - 1}. Полагая p = 5, мы без особого труда убеждаемся, что многочлены a(x) и b(x) взаимно просты в кольце \EuScript Fp[x]. Можно ли из этого сделать вывод, что многочлены a(x) и b(x) взаимно просты в кольце \mathbb Z[x]? Оказывается, можно. Доказательство этого факта основано на следующих утверждениях.

6.8. ПРЕДЛОЖЕНИЕ. Описанное выше отображение \mathbb Z[x] \rightarrow \EuScript F[x], такое, что f(x)7 \mapstofp (x) является гомоморфизмом колец, т. е. сумма переходит в сумму, а произведение—в произведение. В частности, если g(x) | f(x) в \mathbb Z[x], то gp(x) | fp(x) в \EuScript F[x].

6.9. ПРЕДЛОЖЕНИЕ. Предположим, что a(x), \; b(x) \in \mathbb Z[x] —примитивные многочлены и простое число p не делит старшие коэффициенты многочленов a(x) и b(x). Если НОД(ap(x), bp(x)) = 1 в \EuScript Fp[x], то НОД(a(x), b(x)) = 1 в \mathbb Z[x].

6.10. УПРАЖНЕНИЕ. Показать, что оба условия в предложении 6.9 являются существенными, т. е. если многочлены a(x), \; b(x) \in \mathbb Z[x] не являются примитивными или p делит их старшие коэффициенты, то из НОД(ap(x), bp(x)) = 1 в \EuScript Fp[x] не следует, что НОД(a(x), b(x)) = 1 в \mathbb Z[x].

6.11. ПРЕДЛОЖЕНИЕ. Предположим, что a(x), b(x) \in \mathbb Z[x]примитивные многочлены, такие, что НОД(a(x), b(x))=1 в \mathbb Z[x]. Тогда НОД(ap(x), bp(x))=1 в \EuScript Fp[x] для почти всех простых чисел p.

ДОКАЗАТЕЛЬСТВО. Без потери общности мы можем считать, что рассматриваются только простые числа, которые не делят ни старший коэффициент многочлена a(x), ни старший коэффициент многочлена b(x). Условие НОД(ap(x), bp(x)) = 1 означает, что результант Resp(ap, bp) этих многочленов, рассматриваемых как элементы кольца \EuScript F_p[x], не обращается в нуль. Чтобы вычислить Resp(ap, bp), нам достаточно вычислить результант Res(a, b) многочленов a(x), b(x) в кольце \mathbb  Z[x] и взять образ этого результанта по модулю p. Результант Res(a, b) является ненулевым целым числом (так как исходные многочлены по условию взаимно просты) и делится только на конечное число простых чисел.

6.12. ОПРЕДЕЛЕНИЕ. Пусть a(x), \; b(x) \in \mathbb Z[x] —примитивные многочлены, такие, что НОД(a(x), b(x))=1 в \mathbb Z[x]. Простое число p назовем плохой редукцией, если либо p делит старший коэффициент хотя бы одного из многочленов a(x), b(x), либо НОД(a_{p}(x), b_{p}(x)) \ne -1.

6.13. ЗАДАЧА. Для примитивных многочленов a(x), \; b(x) \in \mathbb Z[x] найти ограничение сверху для числа плохих редукций (или ограничение сверху для их произведения).

Для решения этой задачи могут пригодиться результаты, приведенные в "Алгоритмы Кронекера. Разложение на множители, свободные от квадратов. Факторизация" .

Итак, мы можем сформулировать следующий алгоритм проверки взаимной простоты примитивных многочленов a(x), \; b(x) \in \mathbb Z[x].

А 7. АЛГОРИТМ (Проверки взаимной простоты многочленов).

\begin{align*}&\text{Дано: \quad $a(x),\; b(x) \in \mathbb Z[x]$ —примитивные многочлены}\\
&\text{Надо: \quad являются ли $a(x)$ и $b(x)$ взаимно простыми}\\
&\text{начало}\\
&\text{Найти ограничение сверху для числа плохих редукций}\\
&\text{цикл пока ограничение сверху не превышено}\\
&\text{\quad \quad выбрать следующее простое $p$}\\
&\text{\quad \quad если $НОД(ap(x), \; bp(x)) = 1$ то вернуть(взаимно просты)}\\
&\text{\quad \quad конец если}\\
&\text{конец цикла}\\
&\text{вернуть(не взаимно просты)}\\
&\text{конец}\\
\end{align*}

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

Следующее предложение обобщает предложение 6.11.

6.14. ПРЕДЛОЖЕНИЕ. Предположим, что a(x), \; b(x) \in \mathbb Z[x] —примитивные многочлены и d(x) = НОД(a(x), b(x)) в \mathbb Z[x]. Предположим, что pпростое число, которое не делит ни старший коэффициент многочлена a(x), ни старший коэффициент многочлена b(x ). Пусть \tilde
d(x)=НОД(a_p(x),b_p(x)) в \EuScript F_p[x]. Тогда deg \deg \tilde d(x)\ge \deg d(x) и \deg \tilde d(x)= \deg d(x) для почти всех p.

ДОКАЗАТЕЛЬСТВО. Из предложения 6.8 следует, что dp(x) является общим делителем многочленов ap(x) и bp(x)) в \EuScript Fp[x], т. е. d_p(x)\mid\tilde d(x). Следовательно, \deg \tilde d(x)\ge \deg d(x). Применяя предложение 6.11 к многочленам a(x)/d(x ) и b(x)/d(x), получим, что \deg \tilde d(x)= \deg d(x) для почти всех p.

Обобщим определение 6.12 следующим образом.

6.15. ОПРЕДЕЛЕНИЕ. Пусть a(x), \; b(x) \in \mathbb Z[x] —примитивные многочлены. Простое число p назовем плохой редукцией, если либо p делит старший коэффициент хотя бы одного из многочленов a(x), b(x), либо \deg НОД(a_p(x),b_p(x) > \deg \; НОД(a(x),b(x)).

Можно ли утверждать, что \tilde d(x)=d_p(x)? Для ответа на этот вопрос вспомним, что НОД определен с точностью до умножения на обратимые элементы кольца, т. е. d(x)=НОД(a(x),b(x)), следовательно, и d_p(x) определены с точностью до умножения на \pm1, а \tilde d(x) определен с точностью до умножения на ненулевые элементы поля \cF_p. Таким образом, среди возможных значений \tilde d(x) будут d_p(x), но, в общем случае, ими значения \tilde d(x) не исчерпываются.

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

Марина Подлевских
Марина Подлевских

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

Александр Марушко
Александр Марушко
Россия
Стешков Антон
Стешков Антон
Россия, г. Гуково