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

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

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

Выделение линейных множителей.

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

Нахождение линейных множителей основано на теореме Безу, которая утверждает, что если рациональное число m/n, где m -целое, n - натуральное, НОД(m,n)=1, является корнем многочлена с целыми коэффициентами, то n делит старший коэффициент этого многочлена, а m делит его свободный член. Кроме того, между рациональными корнями многочлена и его линейными множителями существует взаимно однозначное соответствие: m/n является корнем многочлена f(x)\in \mathbb Z[x] тогда и только тогда, когда f(x) делится на nx
- m (предполагается, что m и n взаимно простые числа).

А20. АЛГОРИТМ (рациональные_корни).

\begin{equation}\\
 \text{Дано:\quad $f(x)\in\mathbb Z[x]$} \\
\text{ Надо:\qquad $M$-  стек элементов типа $\mathbb Q$ (рациональные  корни  $f(x)$)}\\
\text{\qquad $g(x)$-  делитель максимальной степени многочлена
$(x)$,}\\
\text{\qquad \qquad не имеющий  рациональных корней.}\\  
\text{ Начало}\\
\text{$M.$ начать работу} \\
\text{$a := f.$ старший коэффициент} \\
\text{$b := f.$ свободный член} \\
\text{$g(x) := f(x)$ }\\
 \text{цикл для всех $(p,q)$, где $p\in\mathbb N$, q\in\mathbb Z$,
$p|a$, $q|b$, НОД$(p,q)=1$}\\
\text{\qquad $r:= $ остаток от деления $g(x)$ на  $px-q$}\\
\text{\qquad \qquad // т. е.  $g(x) = (px-q)\cdot h(x) + r$}\\
\text{\qquad  если $r=0$,  то}\\
\text{\qquad \qquad $M.$ добавить $q/p$}\\
\text{\qquad \qquad $g(x) := h(x)$}\\
\text{\qquad  конец если}\\
\text{ конец цикла} \\
\text{ Конец}
\end{equation}

Организация перебора.

15.2. Организация перебора. Простейший случай:

\begin{equation}
		\text{цикл для $p$ от $1$ до $a$ цикл для $p$ от $1$ до
		$a$ таких, что $p|a$}\\
		\text{\qquad цикл для $q$ от $1$ до $b$цикл для $q$ от $1$ до
		$b$ таких, что $q|b\ \&\ НОД(p,q)=1$,}\\
		\text{\qquad \qquad цикл для
		$j=-1;1$}\\
		\text{\qquad \qquad \qquad $r:=\text{остаток от деления$g(x)$на }px-jq$}\\
		\text{\qquad \qquad \qquad \qquad // т. е.  $g(x) = (px-jq)*h(x) + r$}\\
		\text{\qquad \qquad \qquad еслиесли r=0,  то}\\
		\text{\qquad \qquad \qquad \qquad $M.$добавить $q/p$}\\
		\text{\qquad \qquad \qquad \qquad $g(x) := h(x)$}\\
		\text{\qquad \qquad \qquad конец если}\\
		\text{\qquad \qquad конец цикла}\\
		\text{\qquad конец цикла}\\
		\text{конец цикла}
		\end{equation}

15.3. Перебор с предварительным разложением старшего коэффициента и свободного члена на простые множители.

Мы предполагаем, что количество простых чисел, на которые делятся a или b, невелико (не превосходит NDEL ). Эти числа располагаются в массиве del, соответствующие показатели степеней- в pow1 и pow2. Числа p и q задаются векторами curr1 и curr2, которые содержат показатели степеней простых делителей чисел p и q соответственно.

\begin{equation}
\text{$curr1 := 0$} \\
\text{$p := 0$}  \\
\text{$M.$начать работу }\\
\text{конец\_$p$\_перебора$:=$"нет"} \\
\text{цикл пока не конец\_$p$\_перебора}\\
\text{\qquad $q :=1$}\\
\text{\qquad $curr2 := 0$}\\
\text{\qquad конец\_$q$\_перебора$:=$"нет"}\\
\text{\qquad цикл пока не конец\_$q$\_перебора}\\
\text{\qquad \qquad ДЕЛЕНИЕ $(g,p,q,\text{успех})$}\\
\text{\qquad \qquad если успех, то}\\
\text{\qquad \qquad \qquad $M.$добавить $q/p$}\\
\text{\qquad \qquad \qquad цикл для $i$ от 1 до $NDEL$}\\
\text{\qquad \qquad \qquad \qquad $pow1_i := pow1_i - curr1_i$}\\
\text{\qquad \qquad \qquad \qquad $pow2_i := pow2_i - curr2_i$}\\
\text{\qquad \qquad \qquad конец цикла}\\
\text{\qquad \qquad конец если}\\
\text{\qquad \qquad если $q > 0$ то}\\
\text{\qquad \qquad \qquad $q := -q$}\\
\text{\qquad \qquad иначе  $NEXTQ$}\\
\text{\qquad \qquad конец если}\\
\text{\qquad конец цикла}\\
\text{\qquad $NEXTP$}\\
\text{конец цикла}
\end{equation}

А 21. АЛГОРИТМ NEXTP.

\begin{equation}\\
\text{Начало}\\
\text{конец\_$p$\_перебора$:=$"да"} \\
\text{цикл для $i$ от $1$ до $NDEL$
пока конец\_$p$\_перебора}\\
\text{\qquad если $curr1_i < pow1_i$ то}\\
\text{\qquad \qquad $curr1_i := curr1_i + 1$}\\
\text{\qquad \qquad конец\_$p$\_перебора$ :=$"нет"}\\
\text{\qquad иначе $curr1_i:= 0$}\\
\text{\qquad конец если}\\
\text{конец цикла }\\
\text{$p := 1$} \\
\text{если не конец\_$p$\_перебора, то}\\
\text{\qquad цикл для $i$ от $1$ до $NDEL$}\\
\text{\qquad \qquad $p := p\cdot del_i^{curr1_i}$}\\
\text{\qquad конец цикла}\\
\text{конец если }\\
\text{Конец}
\end{equation}

А 22. АЛГОРИТМ NEXTQ.

\begin{equation}\\
\text{Начало}\\
\text{конец\_$q$\_перебора$:=$"да"} \\
\text{цикл для $i$ от $1$ до $NDEL$
пока  конец\_$q$\_перебора}\\
\text{\qquad если $(curr2_i < pow2_i)
\& (pow1_i=0)$ то}\\
\text{\qquad \qquad $curr2_i:= curr2_i + 1$}\\
\text{\qquad \qquad конец\_$q$\_перебора$:=$"нет"}\\
\text{\qquad иначе $curr2_i := 0$}\\
\text{\qquad конец если}\\
\text{конец цикла }\\
\text{$q := 1$ }\\
\text{если не конец\_$q$\_перебора, то}\\
\text{\qquad цикл для $i$ от $1$ до $NDEL$}\\
\text{\qquad \qquad $q := q\cdot del_i^{curr2_i}$}\\
\text{\qquad конец цикла}\\
\text{конец если}\\
\text{Конец}
\end{equation}
< Лекция 6 || Лекция 7: 12345 || Лекция 8 >
Марина Подлевских
Марина Подлевских

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