Метод Кронекера: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Строка 17: Строка 17:
Рассмотрим <math>f(x) \in \mathbb{Z}[x]</math> — многочлен степени <math>n</math>. Пусть <math>f(x)</math> приводим над <math>\mathbb{Z}</math>. Тогда <math>\! f(x) = g(x)h(x)</math> и один из двух многочленов <math>g(x)</math> и <math>h(x)</math> имеет степень не выше <math>n/2</math>. Пусть без ограничения общности <math>\operatorname{deg} \, g(x) \leqslant n/2</math>. Тогда <math>\forall a \in \mathbb{Z} \; h(a) \in \mathbb{Z}</math>, следовательно <math>f(a) \vdots g(a)</math>. Рассмотрим <math>m=n/2+1</math> различных целых чисел <math>a_i, i=\overline{1,m}</math> таких, что <math>f(a_i)\not=0</math>. Поскольку числа <math>\!f(a_i)</math> имеют конечное количество целых делителей, можно перебрать всевозможные наборы значений для <math>\!g(a_i)</math>. По каждому такому набору построим интерполяционный многочлен <math>\!g^*(x)</math> степени <math>m-1=n/2</math>. Если теперь <math>f(x)\vdots g^*(x)</math>, к многочленам <math>\!g^*(x)</math> и <math>\frac{f(x)}{g^*(x)}</math> можно применить тот же метод, и так до тех пор, пока все множители не станут неприводимыми. В противном случае, если <math>\forall g^*(x) \ f(x)\!\!\not\vdots g^*(x)</math>, многочлен <math>f(x)</math> уже является неприводимым.
Рассмотрим <math>f(x) \in \mathbb{Z}[x]</math> — многочлен степени <math>n</math>. Пусть <math>f(x)</math> приводим над <math>\mathbb{Z}</math>. Тогда <math>\! f(x) = g(x)h(x)</math> и один из двух многочленов <math>g(x)</math> и <math>h(x)</math> имеет степень не выше <math>n/2</math>. Пусть без ограничения общности <math>\operatorname{deg} \, g(x) \leqslant n/2</math>. Тогда <math>\forall a \in \mathbb{Z} \; h(a) \in \mathbb{Z}</math>, следовательно <math>f(a) \vdots g(a)</math>. Рассмотрим <math>m=n/2+1</math> различных целых чисел <math>a_i, i=\overline{1,m}</math> таких, что <math>f(a_i)\not=0</math>. Поскольку числа <math>\!f(a_i)</math> имеют конечное количество целых делителей, можно перебрать всевозможные наборы значений для <math>\!g(a_i)</math>. По каждому такому набору построим интерполяционный многочлен <math>\!g^*(x)</math> степени <math>m-1=n/2</math>. Если теперь <math>f(x)\vdots g^*(x)</math>, к многочленам <math>\!g^*(x)</math> и <math>\frac{f(x)}{g^*(x)}</math> можно применить тот же метод, и так до тех пор, пока все множители не станут неприводимыми. В противном случае, если <math>\forall g^*(x) \ f(x)\!\!\not\vdots g^*(x)</math>, многочлен <math>f(x)</math> уже является неприводимым.


== Псевдокод одномерного алгоритма Кронекера ==
== Одномерный алгоритм Кронекера ==


'''Дано:''' <math>f(x) \in \mathbb{Z}[x]</math>
'''Дано:''' <math>f(x) \in \mathbb{Z}[x]</math>

Версия от 16:27, 26 декабря 2011

Метод Кронекера — метод разложения многочлена с целыми коэффициентами на неприводимые множители над кольцом целых чисел; предложен в 1882 Кронекером.

Алгоритм Кронекера находит для данного многочлена многочлен , такой, что делится на , или доказывает, что такого многочлена нет.

Описание метода

Алгоритм Кронекера основан на следующих соображениях:

  1. Если степень многочлена равна , то степень хотя бы одного множителя многочлена не превосходит  ;
  2. Значения как , так и в целых точках — целые числа, причем ) делит для любого целого ;
  3. При фиксированном , если не равно 0, то может принимать только конечное множество значений, состоящее из делителей числа ;
  4. Коэффициенты многочлена однозначно восстанавливаются по его значениям в точке.

Таким образом, для получается конечное число возможностей; непосредственным делением проверяем, получили ли делитель многочлена .

Строгое Изложение:

Рассмотрим  — многочлен степени . Пусть приводим над . Тогда и один из двух многочленов и имеет степень не выше . Пусть без ограничения общности . Тогда , следовательно . Рассмотрим различных целых чисел таких, что . Поскольку числа имеют конечное количество целых делителей, можно перебрать всевозможные наборы значений для . По каждому такому набору построим интерполяционный многочлен степени . Если теперь , к многочленам и можно применить тот же метод, и так до тех пор, пока все множители не станут неприводимыми. В противном случае, если , многочлен уже является неприводимым.

Одномерный алгоритм Кронекера

Дано:

Надо:

Где:  — степень полинома ,  — степень полинома ,  — целочисленное.

Цикл от до

Если () то
Ответ найден.
Конец если

Конец цикла

Если (ответ не найден) то

— множество делителей (целочисленных)
Цикл от до
 — множество делителей (целочисленных)
декартово произведение U и M
Цикл для каждого
Построить многочлен степени , такой, что для
Если ( делиться на ) то
Решение успешно найдено, ответ
Конец если
Конец цикла
Конец цикла

Конец если

Конец.

ЗАМЕЧАНИЕ. Достаточно научиться разлагать на множители многочлены со старшим коэффициентом, равным единице.

Пример

(это многочлен с целыми коэффициентами и без рациональных корней). Если где степень k многочлена не больше степени , то k=2. Пусть Тогда f(0)=1; f(1)= −5; f(2)=-21. Делители этих чисел: для первого +1 и −1, для второго +1, −1, +5, −5, для третьего 1, 3, 7, 21. Всего получается комбинации. Две комбинации отличающиеся лишь знаком, дают два многочлена. Поэтому можно проверять лишь половину. Остаются 32 случая. Перебирая все эти случаи, можно найти лишь один многочлен 2-й степени, делящий . Это . Оба сомножителя этого разложения неприводимы (как многочлены 2-й и 3-й степеней, не имеющие рациональных корней).

Литература

  • Е. В. Панкратьев «Элементы компьютерной алгебры.» М.:МГУ, 2007;
  • Kronecker L. «J. reine und angew. Math.», 1882;
  • Окунев Л. Я. «Высшая алгебра», М., 1937;
  • Курош А. Г. «Курс высшей алгебры», 11 изд., М., 1975;