55
1 МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ НАБЕРЕЖНОЧЕЛНИНСКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ ИНСТИТУТ МАТЕМАТИЧЕСКИЙ ФАКУЛЬТЕТ КАФЕДРА МАТЕМАТИКИ И МЕТОДИКИ ЕЕ ПРЕПОДАВАНИЯ АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ /дипломная работа/ Набережные Челны 2006 год

АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

Embed Size (px)

DESCRIPTION

Matematika

Citation preview

Page 1: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

1

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

НАБЕРЕЖНОЧЕЛНИНСКИЙ ГОСУДАРСТВЕННЫЙ

ПЕДАГОГИЧЕСКИЙ ИНСТИТУТ

МАТЕМАТИЧЕСКИЙ ФАКУЛЬТЕТ

КАФЕДРА МАТЕМАТИКИ И МЕТОДИКИ ЕЕ ПРЕПОДАВАНИЯ

АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

/дипломная работа/

Набережные Челны

2006 год

Page 2: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

2

Содержание

Введение

1. Многочлены

2. Деление многочленов

2.1. Делимость многочленов. Свойства делимости

2.2. Деление многочленов с остатком

2.3. Наибольший общий делитель многочленов

2.4. Алгоритм Евклида

3. Кратные корни

4. Производная от многочлена

5. Кратные множители

5.1. Выделение кратных множителей

Заключение

Список использованной литературы

Page 3: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

3

Введение

Тема моей дипломной работы: «Алгоритмы с многочленами».

Целью данной работы является изучение многочленов, алгоритмов с

ними, рассмотрение возможностей составления различных программ. Для

достижения поставленной цели необходимо рассмотреть следующие

вопросы:

– делимость многочленов;

– деление многочленов с остатком;

– наибольший общий делитель, алгоритм Евклида;

– кратные корни;

– кратные множители, выделение кратных множителей;

– производные от многочленов.

Для выполнения дипломной работы я поставила следующие задачи:

1. изучить литературу о многочленах;

2. применить теорию высшей алгебры в решении задач

элементарной математики;

3. составить программы для нахождения частного и остатка при

делении многочленов, наибольшего общего делителя двух многочленов,

производной многочлена; разложения многочленов на кратные множители.

Page 4: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

4

1. Многочлены

Общий вид уравнения n-ной степени (где n некоторое положительное

число) есть

0... 11

10

пппn ахахаxа . (1.1)

Коэффициенты пп аааа ,,...,, 110 этого уравнения мы будем считать

произвольными комплексными числами, причем старший коэффициент 0а

должен быть отличным от нуля.

Если написано уравнение (1.1), то всегда предполагается, что требуется

его решить, найти такие числовые значения для неизвестного x, которые

удовлетворяют этому уравнению, то есть после подстановки вместо

неизвестного и выполнения всех указанных операций обращают левую часть

уравнения (1.1) в нуль.

Целесообразно заменить задачу решения уравнения (1.1) более общей

задачей изучения левой части этого уравнения

пппn ахахаxа

11

10 ... , (1.2)

называемой многочленом n-ной степени от неизвестного х.

Многочленом называется лишь выражение вида (1.2), то есть лишь сумма

целых неотрицательных степеней неизвестного x, взятых с некоторыми

числовыми коэффициентами. В частности, мы не будем считать

многочленами такие выражения, которые содержат неизвестное x с

отрицательными или дробными показателями. Для сокращенной записи

многочленов употребляются символы f(x), g(x) и так далее.

Page 5: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

5

2. Деление многочленов

Теория многочленов в определенном отношении похожа на теорию

целых чисел, хотя внешне эти две теории не имеют ничего общего.

Внутренняя же близость, схожесть этих теорий объясняется тем, что для

многочленов, так же как и для целых чисел, можно определить деление и, что

еще более важно, деление с остатком.

2.1. Делимость многочленов. Свойства делимости

Многочлен )(xf делится на многочлен 0)( xg , если существует

такой многочлен )(xq , что выполняется равенство

).()()( xqxgxf (2.1)

Например, из равенства )1)(1(1 23 хххх следует, что

13 х делится на многочлен 1х и на многочлен 12 хх .

Многочлен )(xq в равенстве (2.1) определяется однозначно. Если бы

существовал многочлен )(1 xq , удовлетворяющий равенству (2.1), то мы

получили бы, что

)()()()()( 1 xqxgxqxgxf (2.2)

откуда .0)()()( 1 xqxqxg

Но многочлен )(xg по условию ненулевой, и в силу утверждения

0)(0)()( xsxgxs или 0)( xg нулевом является многочлен )()( 1 xqxq ,

т.е. многочлен )(1 xq совпадает с )(xq .

Многочлен )(xq в равенстве (2.1) называется частным от деления )(xf

на )(xg , а )(xg – делителем.

Укажем некоторые основные свойства делимости многочленов.

1. Если )(xf делится )(xg , а )(xg делится на )(xh , то )(xf будет

делиться на )(xh .

Page 6: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

6

В самом деле, по условию )()()( xxgxf и )()()( xxhxg , а поэтому

)]()()[()( xxxhxf .

2. Если )(xf и )(xg делятся на )(x , то их сумма и разность также

делятся на )(x .

Из равенств )()()( xxxf и )()()( xxxg вытекает

)]()()[()()( xxxxgxf .

3. Если )(xf делится на )(x , то произведение )(xf на любой

многочлен )(xg также будет делиться на )(x .

Если )()()( xxxf , то )]()()[()()( xgxxxgxf .

Из 2. и 3. вытекает следующее свойство:

4. Если каждый из многочленов )(),...,(),( 21 xfxfxf n делится на )(x , то на

)(x будет делиться и многочлен )()(...)()()()( 2211 xgxfxgxfxgxf nn , где

)(),...,(),( 21 xgxgxg n - произвольные многочлены.

5. Всякий многочлен )(xf делится на любой многочлен нулевой

степени.

Если nnn axaxaxf ...)( 1

10 , а с - произвольное число, не равное

нулю, то есть произвольный многочлен нулевой степени, то

)...()( 110

c

ax

c

ax

c

acxf nnn .

6. Если )(xf делится на )(x , то )(xf делится и на с )(x , где с –

произвольное число отличное от нуля.

Из равенства )()()( xxxf следует равенство

)]()][([)()()( 11 xcxcxxccxf .

7. Многочлены )(xcf , 0с , и только они будут делителями многочлена

)(xf , имеющими такую же степень, что и )(xf .

Действительно, )]([)( 1 xcfcxf . То есть )(xf делится на )(xcf .

Page 7: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

7

Если )(xf делится на )(x , причем степени )(xf и )(x совпадают, то

степень частного от деления )(xf на )(x должна быть равной нулю, то есть

)()( xbxf , 0b , откуда )()( 1 xfbx .

Отсюда вытекает следующее свойство:

8. Тогда и только тогда многочлены )(xf , )(xg одновременно делятся

друг на друга, если )()( xcfxg , 0с .

Из 1. и 8. вытекает свойство:

9. Всякий делитель одного из двух многочленов )(xf , )(xcf , где 0с ,

будет делителем и для другого многочлена.

Свойства делимости многочленов могут быть применены для изучения

делимости в множестве целых чисел. Выясним, например, для каких целых

чисел n число 2523 nnn является простым.

Натуральное число, отличное от 1, называется простым, если оно

делится только на 1 и на само себя; целое отрицательное число k называется

простым, если число –k простое.

Для ответа на поставленный вопрос заметим, что справедливо

равенство

),13)(2(25 223 хххххх (2.3)

и поэтому число 2523 nnn делится на 2n и на .132 nn

Следовательно, оно может быть простым только в случае, когда один из этих

делителей равен 1 или –1, т.е. выполняется хотя бы одно из равенств

,12 n ,12 n .1132 nn

Остается проверить следующие значения n: 3, 1, 0, -3, -1 и –2. При этих

значениях n рассматриваемое число равно соответственно 19, -5, 3, 4, так что

искомое множество чисел есть .1,3,0,1,3

Может возникнуть вопрос: откуда взялось равенство (2.3)? Как мы

догадались, что многочлен 2523 ххх таким образом раскладывается на

множители? Для нахождения разложений такого типа необязательно

Page 8: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

8

прибегать к искусственным группировкам, это можно сделать с помощью

теории, которая будет изложена ниже.

Из этого примера видно, что уже для решения задач, связанных с

делимостью целых чисел, полезно уметь выяснять, делится ли данный

многочлен на некоторый другой многочлен (раскладывается ли на

множители).Ответ на такой и многие другие вопросы можно найти с

помощью деления многочлена с остатком.

2.2. Деление многочленов с остатком

Для многочленов, как и для целых чисел, существует алгоритм деления

с остатком.

Теорема о делении с остатком. Для любых двух многочленов f(x) и g(x)

можно найти такие многочлены q(x) и r(x , что

f(x)=g(x)q(x)+r(x),

причем степень r(x) меньше степени g(x) или же r(x)=0. Многочлены

q(x) и r(x), удовлетворяющие этому условию, определяются однозначно.

Если разности f(x)-r(x) и )()( 1 xrxf обе делятся на g(x), то их разность

)()()( 1 xrxrxs также делится на g(x). Если бы многочлен s(x) был

ненулевым, то он имел бы степень меньшую, чем g(x), и не мог бы тогда

делится на g(x). Следовательно, s(x)=0, так что )()(1 xrxr .

В практической деятельности для нахождения частного и остатка

применяют способ вычисления, называемый «деление углом». Покажем его

на примере.

Пример. Найти частный и остаток от деления )(xf на )(xg .

1. 123)( 25 xxxxf и 13)( 23 xxxg

123 25 xxx | 13 23 xx

245 393 xxx 2793 2 xx

19 24 xxx

Page 9: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

9

xxx 9279 34

11027 23 xxx

278127 23 xx

261080 2 xx

Частным от деления )(xf на )(xg является многочлен 2793 2 xx ,

остатком – 261080 2 xx .

2. 133)( 2345 xxxxxxf и 122)( 234 xxxxxg

133 2345 xxxxx │ 122 234 xxxx

xxxxx 2345 22 3x

143 24 xxx

36333 234 xxxx

4223 23 xxx

Частным от деления )(xf на )(xg является многочлен 3x , остатком –

4223 23 xxx .

Это правило в общем виде можно сформулировать так:

1) разделить старший член многочлена f(x) на старший член g(x) и

записать результат «под длинной стороной угла»;

2)умножить g(x) на результат действия 1) и записать произведение под

многочленом f(x);

3) вычесть из f(x) записанный под ним многочлен;

4) проверить имеет ли результат действия 3) степень меньшую, чем

степень g(x); если да (или результат нулевой), то он является остатком, а под

длинной стороной угла записано частное, если нет, то применить к этому

результату действие 1), рассматривая его как многочлен f(x).

Я составила программу для нахождения частного и остатка.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Page 10: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

10

Dialogs, StdCtrls, Grids;

type

TForm1 = class(TForm)

SGd1: TStringGrid;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Button1: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

i,n,m,step,j,f:integer;

d,l,s:string;

Page 11: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

11

a,a2,b,b2,k:array[0..100] of integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

n:=StrToInt(Edit1.Text);

m:=StrToInt(Edit2.Text);

for i:=n+1 downto 1 do begin

a[i]:=StrToInt(SGd1.Cells[n-(i-1),0]);

end;

for i:=m+1 downto 1 do begin

b[i]:=StrToInt(SGd1.Cells[m-(i-1),1]);

end;

s:='f1(x)=';

for i:=n+1 downto 1 do begin

if a[i]<>0 then begin if(a[i-1]<0)or(i=1) then begin

str(a[i],l);

str(i-1,d);

s:=s+l+'x^'+d;

end

else begin

str(a[i],l);

str(i-1,d);

s:=s+l+'x^'+d+'+';

end;

end;

end;

Edit3.Text:=s;

s:='f2(x)=';

for i:=m+1 downto 1 do begin

Page 12: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

12

if b[i]<>0 then begin if(b[i-1]<0)or(i=1) then begin

str(b[i],l);

str(i-1,d);

s:=s+l+'x^'+d;

end

else begin

str(b[i],l);

str(i-1,d);

s:=s+l+'x^'+d+'+';

end;

end;

end;

Edit4.Text:=s;

for j:=N+1 downto 1 do begin

a2[j]:=a[j];

b2[j]:=0;

end;

step:=n-m;

f:=n+2;

for i:=step+1 downto 1do begin

f:=f-1;

k[i]:=a2[f];

for j:=m+1 downto 1do begin

b2[j]:=k[i]*b[j];

end;

for j:=f downto 1 do begin

a2[j]:=a2[j]*b[m+1];

end;

for j:=f downto 1 do begin

a2[j]:=a2[j]-b2[j+1-i];

Page 13: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

13

b2[j]:=0;

end;

end;

s:='h(x)=';

for i:=f downto 1 do begin

if k[i]<>0 then begin if(k[i-1]<0)or(i=1) then begin

str(k[i],l);

str(i-1,d);

s:=s+l+'x^'+d;

end

else begin

str(k[i],l);

str(i-1,d);

s:=s+l+'x^'+d+'+';

end;

end;

end;

Edit5.Text:=s;

s:='r(x)=';

for i:=n downto 0 do begin

if a2[i]<>0 then begin if(a2[i-1]<0)or(i=1) then begin

str(a2[i],l);

str(i-1,d);

s:=s+l+'x^'+d;

end

else begin

str(a2[i],l);

str(i-1,d);

s:=s+l+'x^'+d+'+';

end;

Page 14: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

14

end;

end;

Edit6.Text:=s;

end;

end.

2.3. Наибольший общий делитель многочленов

Пусть даны произвольные многочлены )(xf и )(xg . Многочлен будет

называться общим делителем для )(xf и )(xg , если он служит делителем для

каждого из этих многочленов. Свойство 5. показывает, что к числу общих

делителей многочленов )(xf и )(xg принадлежат все многочлены нулевой

степени. Если других общих делителей эти два многочлена не имеют, то они

называются взаимно простыми.

Page 15: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

15

В общем же случае многочлены )(xf и )(xg могут обладать

делителями, зависящими от x , и введем понятие о наибольшем общем

делителе этих многочленов.

Наибольшим общим делителем отличных от нуля многочленов )(xf и

)(xg называется такой многочлен )(xd , который является их общим

делителем и, вместе с тем, сам делится на любой другой общий делитель

этих многочленов. Обозначается наибольший общий делитель многочленов

)(xf и )(xg символом ))(),(( xgxf .

Это определение оставляет открытым вопрос, существует ли

наибольший общий делитель для любых многочленов )(xf и )(xg . Ответ на

этот вопрос положительный. Существует метод для практического

разыскания наибольшего общего делителя данных многочленов, называемый

алгоритмом последовательного деления или алгоритмом Евклида.

2.4. Алгоритм Евклида

Алгоритм Евклида – метод для нахождения наибольшего общего

делителя двух целых чисел, а также двух многочленов от одного

переменного. Он первоначально был изложен в «Началах» Евклида в

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

Алгоритм Евклида для нахождения наибольшего общего делителя, как в

кольце целых чисел, так и в кольце многочленов от одного переменного

является частным случаем некого общего алгоритма в евклидовых кольцах.

Алгоритм Евклида для нахождения наибольшего общего делителя двух

многочленов )(xf и )(xg состоит в последовательном делении с остатком

)(xf на )(xg , затем )(xg на первый остаток )(1 xr , затем )(1 xr на второй

остаток )(2 xr и так далее. Так как степени остатков все время понижаются,

то в этой цепочке последовательных делений мы дойдем до такого места, на

котором деление совершится нацело и процесс остановится. Последний

Page 16: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

16

отличный от нуля остаток )(xrn , на который нацело делится предыдущий

остаток )(1 xrn , и является наибольшим общим делителем многочленов )(xf и

)(xg .

Для доказательства запишем изложенное в виде следующей цепочки

равенств:

)()()()(

)()()()(

)()()()(

3321

221

11

xrxqxrxr

xrxqxrxg

xrxqxgxf

(2.4)

0)()()(

)()()()(

11

12

xqxrxr

xrxqxrxr

nnn

nnnn

Последнее равенство показывает, что )(xrn служит делителем для

)(1 xrn . Отсюда следует, что оба слагаемых правой части предпоследнего

равенства делятся на )(xrn , а поэтому )(xrn будет делителем и для )(2 xrn .

Далее, таким же путем, поднимаясь вверх, мы получим, что )(xrn является

делителем и для )(3 xrn , …, )(2 xr , )(1 xr . Отсюда ввиду второго равенства, будет

следовать, что )(xrn служит делителем для )(xg , а поэтому, на основании

первого равенства, - и для )(xf .

Возьмем теперь произвольный общий делитель )(x многочленов )(xf

и )(xg . Так как левая часть и первое слагаемое правой части первого из

равенств делятся на )(x , то )(1 xr также будет делится на )(x . Переходя ко

второму и следующему равенствам, таким же способом получим, что на )(x

делятся многочлены )(2 xr , )(3 xr , … Наконец, если уже будет доказано, что

)(2 xrn и )(1 xrn делятся на )(x , то из предпоследнего равенства получим, что

)(xrn делится на )(x . Таким образом, )(xrn на самом деле будет наибольшим

общим делителем для )(xf и )(xg .

Мы доказали, что любые два многочлена обладают наибольшим общим

делителем, и получили способ его вычисления. Этот способ показывает, что

если многочлены )(xf и )(xg имеют оба рациональные или действительные

Page 17: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

17

коэффициенты, то и коэффициенты их наибольшего общего делителя

также будут рациональными или, соответственно, действительными, хотя

у этих многочленов могут существовать и такие делители, не все

коэффициенты которых рациональны (действительны).

Если )(xd есть наибольший общий делитель многочленов )(xf и )(xg ,

то, как показывают свойства 8. и 9., в качестве наибольшего общего делителя

этих многочленов можно было бы выбрать также многочлен )(xcd , где c -

произвольное число, отличное от нуля. Иными словами, их наибольший

общий делитель двух многочленов определен лишь с точностью до

множителя нулевой степени. Ввиду этого можно условиться, что старший

коэффициент наибольшего общего делителя двух многочленов будет всегда

считаться равным единице. Используя это условие можно сказать, что два

многочлена тогда и только тогда взаимно просты, если их наибольший

общий делитель равен единице. В самом деле, в качестве наибольшего

общего делителя двух взаимно простых многочленов можно взять любое

число, отличное от нуля, но, умножая его на обратный элемент, получим

единицу.

Применяя алгоритм Евклида к многочленам с целыми

коэффициентами, можем, чтобы избежать дробных коэффициентов,

умножить делимое или сократить делитель на любое не равное нулю число,

причем не только начиная какое-либо из последовательных делений, но и в

процессе самого этого деления. Это будет приводить к искажению частного,

но интересующие нас остатки будут приобретать лишь некоторый

множитель нулевой степени, что при разыскании наибольшего общего

делителя допускается.

Пример. Найти наибольший общий делитель многочленов )(xf и )(xg .

1. 12)( 345 xxxxxf и 2223)( 234 xxxxxg

Совершим требуемые деления с остатком:

12345 xxxx | 2223 234 xxxx

Page 18: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

18

36333 345 xxxx 1|||| x

xxxxx 2223 2345

3424 234 xxxx

9126123 234 xxxx

2223 234 xxxx

714714 23 xxx

122 23 xxx

2223 234 xxxx | 122 23 xxx

44246 234 xxxx 1||3|| x

xxxx 3636 234

44 23 xxx

8282 23 xxx

122 23 xxx

99 2 x

12 x

122 23 xxx | 12 x

xx 22 3 12 x

12 x

12 x

0

Построение последовательности Евклида закончено. Ее последний

член 12 x есть наибольший общий делитель исходных многочленов.

2. 7787)( 346 xxxxxf и 7373)( 235 xxxxg

Совершим требуемые деления с остатком:

7787 346 xxxx │ 7373 235 xxx

212124213 346 xxxx || x

Page 19: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

19

xxxx 7373 346

21142114 34 xxx

3232 34 xxx

7373 235 xxx │ 3232 34 xxx

146146 235 xxx 9||3|| x

xxxx 9696 245

149149 34 xxx

28182818 34 xxx

27182718 34 xxx

13 x

13 x

3232 34 xxx │ 13 x

xx 22 4 32 x

33 3 x

33 3 x

0

Построение последовательности Евклида закончено. Ее последний

член 13 x есть наибольший общий делитель исходных многочленов.

Я составила программу для нахождения наибольшего общего делителя

двух многочленов:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms,

Dialogs, StdCtrls, Grids;

Page 20: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

20

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Edit2: TEdit;

SGd1: TStringGrid;

Label3: TLabel;

Button1: TButton;

Label4: TLabel;

Edit4: TEdit;

Label5: TLabel;

Label6: TLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

st1,st2:integer;

kof1,kof2,k1,k2:array[0..10] of integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var i,j,k_1,st3,l:integer;

sokr:boolean;

k2_2,k1_1:array[0..10] of integer;

begin

Page 21: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

21

st1:=StrToInt(Edit1.Text);

st2:=StrToInt(Edit2.Text);

for i:=0 to st1 do begin

kof1[i]:=StrToInt(SGd1.Cells[i,0]);

k1[i]:=StrToInt(SGd1.Cells[i,0]);

end;

for i:=0 to st2 do begin

kof2[i]:=StrToInt(SGd1.Cells[i,1]);

k2[i]:=StrToInt(SGd1.Cells[i,1]);

end;

while kof2[0]<>0 do begin

repeat

Edit4.Text:='';

k_1:=k1[0];

if k1[0]<>kof2[0] then begin

if (k1[0] mod kof2[0])=0 then begin

for j:=0 to st2 do

k2[j]:=(k1[0] div kof2[0])*kof2[j];

end

else begin

if k2[0]<>1 then

for j:=0 to st1 do

k1[j]:=kof2[0]*k1[j];

if k_1<>1 then begin

for j:=0 to st2 do

k2[j]:=k_1*kof2[j];

end;

end;

end;

for i:=1 to st1 do begin

Page 22: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

22

k1[i-1]:=k1[i]-k2[i];

end;

st1:=st1-1;

until st1<st2;

if k1[0]<>0 then begin //Сокращение

sokr:=true;

for i:=1 to st1 do

if k1[i]<>0 then begin

if (k1[i] mod k1[0])<>0 then sokr:=false;

end;

k_1:=k1[0];

if sokr=true then

for i:=0 to st1 do

k1[i]:=k1[i] div k_1;

end;

for i:=0 to st2 do //Замена многочленов

k2_2[i]:=kof2[i];

for i:=0 to st1 do

k1_1[i]:=k1[i];

for i:=0 to 10 do begin

kof1[i]:=0;

k1[i]:=0;

kof2[i]:=0;

k2[i]:=0;

end;

for i:=0 to st2 do begin

k1[i]:=k2_2[i];

if k1[i]<>0 then

Edit4.Text:=Edit4.Text+IntToStr(k1[i])+'x^'+IntToStr(st2-i);

if (k2_2[i+1]>0)and(i<st2) then Edit4.Text:=Edit4.Text+'+';

Page 23: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

23

end;

for i:=0 to st1 do begin

k2[i]:=k1_1[i];

kof2[i]:=k1_1[i];

end;

st3:=st1;

st1:=st2;

st2:=st3;

end;

end;

end.

Используем алгоритм Евклида для доказательства следующей теоремы:

Теорема. Если )(xd есть наибольший общий делитель многочленов

)(xf и )(xg , то можно найти такие многочлены )(xu и )(xv , что

)()()()()( xdxvxgxuxf . (2.5)

Можно считать при этом, если степени многочленов )(xf и )(xg

больше нуля, что степень )(xu меньше степени )(xg , а степень )(xv меньше

степени )(xf .

Page 24: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

24

Доказательство основано на равенствах (2.4). Если учтем, что

)()( xdxrn , и положим 1)(1 xu , )()(1 xqxv n , то предпоследнее из равенств

(2.4) даст:

)()()()()( 1121 xdxvxrxrxu nn

)()()()()( 1112 xvxrxuxrxd nn .

Подставляя сюда выражение )(1 xrn через )(3 xrn и )(2 xrn из

предшествующего равенства (2.4), получим:

)()()()()( 2223 xvxrxuxrxd nn ,

где )()( 12 xvxu , )()()()( 1112 xqxvxuxv n . Продолжая подниматься вверх

по равенствам (2.4), придем к доказываемому равенству (2.5).

Для доказательства второго утверждения теоремы предположим, что

многочлены )(xu и )(xv , удовлетворяющие равенству (2.5), уже найдены, но,

например, степень )(xu больше или равна степени )(xg . Делим )(xu на )(xg :

)()()()( xrxqxgxu ,

где степень )(xr меньше степени )(xg , и подставляем это выражение в

(2). Получим равенство:

)()()()()()()( xdxvxgxrxqxgxf

)()]()()()[()()( xdxqxfxvxgxrxf .

Степень множителя, стоящего при )(xf , уже меньше степени )(xg .

Степень многочлена, стоящего в квадратных скобках, будет в свою очередь

меньше степени )(xf , так как в противном случае степень второго

слагаемого левой части была бы не меньше степени )()( xfxg , а так как

степень первого слагаемого меньше степени этого произведения, то вся левая

часть имела бы степень, большую или равную степени )()( xfxg , тогда как

многочлен )(xd заведомо имеет, при наших предположениях, меньшую

степень.

Теорема доказана.

Page 25: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

25

Одновременно получаем, что если многочлены )(xf и )(xg имеют

рациональные или действительные коэффициенты, то и многочлены )(xu и

)(xv , удовлетворяющие равенству (2.5), можно подобрать так, что их

коэффициенты будут рациональными или, соответственно действительными.

Применяя доказанную теорему к взаимно простым многочленам,

получаем такой результат:

Многочлены )(xf и )(xg тогда и только тогда взаимно просты, если

можно найти многочлены )(xu и )(xv , удовлетворяющие равенству

1)()()()( xvxgxuxf . (2.6)

Опираясь на этот результат, можно доказать несколько простых, но

важных теорем о взаимно простых многочленах:

Теорема 1. Если многочлен )(xf взаимно прост с каждым из

многочленов )(x и )(x , то он взаимно прост и с их произведением.

Доказательство. В самом деле, существуют, по (2.6), такие

многочлены )(xu и )(xv , что 1)()()()( xvxxuxf .

Умножая это равенство на )(x , получаем:

)()()]()([)]()()[( xxvxxxxuxf ,

откуда следует, что всякий общий делитель )(xf и )()( xx был бы

делителем и для )(x ; однако по условию 1))(),(( xxf .

Теорема 2. Если произведение многочленов )(xf и )(xg делится на

)(x , но )(xf и )(x взаимно просты, то )(xg делится на )(x .

Доказательство. Умножая равенство 1)()()()( xvxxuxf на )(xg ,

получим: )()]()()[()()]()([ xgxgxvxxuxgxf .

Оба слагаемых левой части этого равенства делятся на )(x ; на него

делится, следовательно, и )(xg .

Теорема 3. Если многочлен )(xf делится на каждый из многочленов

)(x и )(x , которые между собой взаимно просты, то )(xf делится и на их

произведение.

Page 26: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

26

Доказательство. Действительно, )()()( xxxf , так что произведение,

стоящее справа, делится на )(x . Поэтому, по теореме 2, )(x делится на

)(x , )()()( xxx , откуда )()]()([)( xxxxf .

Определение наибольшего общего делителя может быть распространен

на случай любой конечной системы многочленов: наибольшим общим

делителем многочленов )(),...,(),( 21 xfxfxf s называется такой общий делитель

этих многочленов, который делится на любой другой общий делитель этих

многочленов. Существование наибольшего общего делителя для любой

конечной системы многочленов вытекает из следующей теоремы, дающей

также способ его вычисления.

Теорема. Наибольший общий делитель многочленов )(),...,(),( 21 xfxfxf s

равен наибольшему общему делителю многочлена )(xf s и наибольшего

общего делителя многочленов )(),...,(),( 121 xfxfxf s .

Доказательство. В самом деле, при 2s теорема очевидна. Примем

поэтому, что для случая 1s она справедлива, то есть, в частности, уже

доказано существование наибольшего общего делителя )(xd многочленов

)(),...,(),( 121 xfxfxf s . Обозначим через )(xd наибольший общий делитель

многочленов )(xd и )(xf s . Он будет общим делителем для всех заданных

многочленов. С другой стороны, всякий другой общий делитель этих

многочленов будет делителем также и для )(xd , а поэтому и для )(xd .

В частности, система многочленов )(),...,(),( 21 xfxfxf s называется

взаимно простой, если общими делителями этих многочленов являются

лишь многочлены нулевой степени, то есть если их наибольший общий

делитель равен 1. Если 2s , то попарно эти многочлены могут и не быть

взаимно простыми.

Page 27: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

27

3. Кратные корни

Теорема Безу. Многочлен f(x) делится на x-c тогда и только тогда,

когда число c является его корнем.

Рассмотрим произвольный многочлен f(x) и разделим его с остатком на

двучлен x-c. Поскольку степень этого двучлена равна 1, то остаток либо

равен 0, либо имеет степень 0. И в том, и в другом случае остаток r есть

число. Таким образом, многочлен f(x) представляется в виде:

f(x)= (x-c) q(x)+ r.

Положив в этом тождестве x= c, получим что f(c)=r. Мы доказали тем

самым, что остаток от деления многочлена на двучлен x- c равен значению

многочлена при x=c.

С помощью теоремы Безу решим несколько задач.

Пример 1. Решить уравнение 02232 23 xxx .

Многочлен f(x)= 2232 23 xxx имеет корень 2. По теореме Безу f(x)

делится на x-2, то есть имеет место равенство

)114)(2()( 2 xxxxf .

2232 23 xxx | 2x

23 2xx 1142 xx

2234 2 xx

xx 84 2

2211 x

2211 x

0

Остается решить квадратное уравнение 01142 xx .

Это уравнение не имеет действительных корней, так что x=2 –

единственный действительный корень исходного уравнения.

2. Решить уравнение 0233 xx .

Многочлен f(x)= 233 xx имеет корень -2. По теореме Безу f(x)

делится на x+2, то есть имеет место равенство )12)(2()( 2 xxxxf .

Page 28: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

28

233 xx | 2x

23 2xx 122 xx

232 2 xx

xx 42 2

2

2

x

x

0

Остается решить квадратное уравнение 0122 xx .

Это уравнение имеет корень 1. Так что x=-2 и x=1 – корни исходного

уравнения.

Если c – корень многочлена f(x), то есть f(c)=0, то f(x) делится на x-c.

Может оказаться, что многочлен f(x) делится не только на первую степень

линейного двучлена x-c, но и на более высокие его степени. Во всяком

случае, найдется такое натуральное число k, что f(x) нацело делится на kcx )( , но не делится на 1)( kcx . Поэтому

)()()( xcxxf k ,

где многочлен )(х на x-c уже не делится, то есть число с своим

корнем не имеет. Число k называется кратностью корня c в многочлене f(x),

а сам корень c – k- кратным корнем этого многочлена. Если k=1, то говорят,

что корень с – простой.

Page 29: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

29

4. Производная от многочлена

Понятие кратного корня тесно связано с понятием производной от

многочлена. Мы изучаем многочлены с любыми комплексными

коэффициентами и поэтому не можем просто воспользоваться понятием

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

сказано ниже, следует рассматривать как независимое от курса анализа

определение производной многочлена.

Пусть дан многочлен n–ной степени

f(x)= пппn ахахаxа

11

10 ...

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

производной) называется многочлен (n- 1)-й степени

122

11

0 2...)1()('' nn

nn axaxanxnaxf

Производная от многочлена нулевой степени и от нуля считается

равной нулю. Производная от первой производной называется второй

производной от многочлена f(x) и обозначается через f“(x) . Очевидно, что

0)( !)( anxf n

и по этому 0)()1( xf n , то есть (n+1)-я производная от многочлена n–й

степени равна нулю.

Свойства, являющиеся формулами дифференцирования для суммы и

произведения:

1. )(')('))'()(( xgxfxgxf (4.1)

2. )()(')'()())'()(( xgxfxgxfxgxf (4.2)

Эти формулы легко проверить, впрочем, непосредственным подсчетом,

беря в качестве и два произвольных многочлена и применяя данное выше

определение производной.

Формула (4.2) распространяется на случай произведения любого

конечного числа множителей, а поэтому выводится формула для

производной от степени:

Page 30: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

30

3. )(')())'(( 1 xfxkfxf kk (4.3)

Доказательство. Используем метод математической индукции.

2k )()(2)()()()())()(())(( 2 xfxfxfxfxfxfxfxfxf

1 nk )()()1())(( 21 xfxfnxf nn

nk )()()()()()1())()(( 121 xfxfxfxfxfnxfxf nnn

)()()()()()()1( 111 xfxnfxfxfxfxfn nnn .

Если число с является k –кратным корнем многочлена f(x), то при k>1

оно будет (k-1)–кратным корнем первой производной этого многочлена; если

же k=1 , то с не будет служить корнем для )(' xf .

В самом деле, пусть

)()()( xcxxf k , 1k , (4.4)

где )(x уже не делится на х-с. Дифференцируя равенство (4.4),

получаем:

))()(')(()()()()(')()(' 11 xkxcxcxxcxkxcxxf kkk .

Первое слагаемое суммы делится на х-с, а второе на х-с не делится;

поэтому вся эта сумма на х-с не может делиться. Учитывая, что частное от

деления f(x) на 1)( kcx определено однозначно, мы получаем, что 1)( kcx

является наибольшей степенью двучлена х-с, на которую делится многочлен

)(' xf .

Применяя эту теорему несколько раз, мы получаем, что k-кратный

корень многочлена f(x) будет (k-s)-кратным в s-й производной этого

многочлена )( sk и впервые не будет служить корнем для k-й производной

от f(x).

Пример. Найти производную )(' xf многочлена )(xf .

20164312)( 2356 xxxxxxf

162121572)( 245 xxxxxf .

Я составила программу для нахождения первой производной

многочлена.

Page 31: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

31

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms,

Dialogs, StdCtrls, Grids;

type

TForm1 = class(TForm)

Edit1: TEdit;

Label1: TLabel;

SGd1: TStringGrid;

Label2: TLabel;

Button1: TButton;

Edit2: TEdit;

Edit3: TEdit;

Label3: TLabel;

Label4: TLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

c,i,st:integer;

k,l,s:string;

kof:array[0..100] of integer;

Page 32: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

32

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

st:=StrToInt(Edit1.Text);

for i:=0 to st do begin

if SGd1.Cells[i,0]<>'' then

kof[st-i]:=StrToInt(SGd1.Cells[i,0])

else MessageDlg ('Внимание! Не введены значения

коэффициентов!',mtWarning,[mbOK],0);

end;

s:='f(x)=';

for i:=st downto 0 do begin

if kof[i]<>0 then begin

if(kof[i-1]<0)or(i=0) then begin

str(kof[i],l);

str(i,k);

s:=s+l+'x^'+k;

end

else begin

str(kof[i],l);

str(i,k);

s:=s+l+'x^'+k+'+';

end;

end;

kof[i]:=kof[i]*i;

end;

Edit2.Text:=s;

s:='f1(x)=';

for i:=st downto 0 do begin

Page 33: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

33

if kof[i]<>0 then begin

if(kof[i-1]<0)or(i=1) then begin

str(kof[i],l);

str(i-1,k);

s:=s+l+'x^'+k;

end

else begin

str(kof[i],l);

str(i-1,k);

s:=s+l+'x^'+k+'+';

end;

end;

Edit3.Text:=s;

end;

end;

end.

Page 34: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

34

5. Кратные множители

Существуют методы, позволяющие узнать, обладает ли данный

многочлен кратными множителями, и в случае положительного ответа

дающие возможность свести изучение этого многочлена к изучению

многочленов, уже не содержащих кратных множителей.

Теорема. Если )(xp является k - кратным неприводимым множителем

многочлена )(xf , 1k , то он будет )1( k - кратным множителем производной

этого многочлена. В частности, простой множитель многочлена. Не входит в

разложение производной.

В самом деле, пусть

)()()( xgxpxf k , (5.1)

причем )(xg уже не делится на )(xp . Дифференцируя равенство (5.1),

получаем:

)]()()()()[()()()()()()( 11 xgxpkxgxpxpxgxpxkpxgxpxf kkk .

Второе из слагаемых, стоящих в скобках, не делится на )(xp .

Действительно, )(xg не делится )(xp по условию, )(xp имеет меньшую

степень, т.е. также не делится на )(xp . С другой стороны, первое слагаемое

суммы, стоящей в квадратных скобках, делиться на )(xp , т.е. множитель )(xp ,

на самом деле входит в )(xf с кратностью )1( k .

Из данной теоремы и из указанного выше способа разыскания

наибольшего общего делителя двух многочленов следует, что если дано

разложение многочлена )(xf на неприводимые множители:

)()()()( 21210 xpxpxpaxf lk

lkk , (5.2)

то наибольший общий делитель многочлена )(xf и его производной

обладает следующим разложением на неприводимые множители:

)()()())(),(( 112

11

21 xpxpxpxfxf lkl

kk , (5.3)

Page 35: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

35

где множитель )(1 xp lkl

следует при 1ik заменять единицей. В

частности, многочлен )(xf тогда и только тогда не содержит кратных

множителей, если он взаимно прост со своей производной.

5.1. Выделение кратных множителей

Если дан многочлен )(xf с разложением (5.2) и если через )(1 xD мы

обозначим наибольший общий делитель )(xf и его производной )(xf то (5.3)

будет разложением для )(1 xD . Деля (5.2) на (5.3), мы получим:

)()()()(

)()( 210

11 xpxpxpa

xD

xfxE l

т.е. получим многочлен, не содержащий кратных множителей, причем

всякий неприводимый множитель для )(1 xE , имеющего вообще говоря,

меньшую степень и, во всяком случае, содержащего лишь простые

множители. Если эта задача для )(1 xE будет решена, то останется определить

лишь кратность найденных неприводимых множителей в )(xf , что

достигается применением алгоритма деления.

Усложняя изложенный сейчас метод, можно сразу перейти к

рассмотрению нескольких многочленов без кратных множителей, причем,

найдя неприводимые множители этих многочленов, мы не только найдем все

неприводимые множители для )(xf , но и будем знать их кратность.

Пусть (5.2) будет разложением )(xf на неприводимые множители,

причем наивысшая кратность множителей есть s , 0s . Обозначим через

)(1 xF произведение всех однократных множителей многочлена )(xf , через

)(2 xF - произведение всех двукратных множителей, но взятых лишь по

одному разу, и т.д., наконец )(xFs - произведение всех s -кратных

множителей, также взятых лишь по одному разу; если при этом для

некоторого j в )(xf отсутствуют j -кратные множители, то полагаем

Page 36: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

36

1)( xFj . Тогда )(xf будет делиться на k - тую степень многочлена

sxFk ,,2,1)( и разложение (5.2) примет вид

)()()()()( 33

2210 xFxFxFxFaxf s

s

а разложение (5.3) для ))(),(()(1 xfxfxD перепишется в виде

)()()()( 12321 xFxFxFxD s

s

обозначая через )(2 xD наибольший общий делитель многочлена )(1 xD и

его производной и вообще через )(xDk наибольший общий делитель

многочленов )(1 xDk и )(1 xDk , таким путем получим:

)()()()( 22432 xFxFxFxD s

s

)()()()( 32543 xFxFxFxD s

s

……………………………

)()(1 xFxD ss

1)( xDs .

Отсюда

)()()()()(

)()( 3210

11 xFxFxFxFa

xD

xfxE s ,

)()()()(

)()( 32

2

12 xFxFxF

xD

xDxE s

)()()(

)()( 3

3

23 xFxF

xD

xDxE s

……………………………

)()(

)()( 1 xF

xD

xDxE s

s

ss ,

И поэтому, наконец,

)(

)()(

20

11 xEa

xExF ,

)(

)()(

3

22 xE

xExF , …, )()( xExF ss

Таким образом, пользуясь лишь приемами, не требующими знания

неприводимых множителей многочлена )(xf , а именно взятием производной,

алгоритмом Евклида и алгоритмом деления, мы можем найти многочлены

)(,),(),(),( 321 xFxFxFxF s без кратных множителей, причем всякий

Page 37: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

37

неприводимый множитель многочлена )(xFk sk ,,3,2,1 , будет k -кратным

для )(xf .

Пример. Разложить многочлен )(xf на кратные множители.

277251815)( 2346 xxxxxxf

12174107210224606)( 235235 xxxxxxxxxf

ffD ,1

277251815 2346 xxxxx │ 1217410 235 xxxx

xxxxx 1217410 2346 x

27603445 234 xxxx

27603445 234 xxxx

1217410 235 xxxx │ 27603445 234 xxxx

608520505 235 xxxx 1x

xxxxxx 7217603445 2345

6011240164 234 xxxx

7514050205 234 xxxx

27603445 234 xxxx

48801616 23 xxx

3523 xxx

27603445 234 xxxx │ 3523 xxx

xxxx 152555 234 15 x

274599 23 xxx

3523 xxx

3523 xxx

0

35231 xxxD

Page 38: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

38

523 21 xxD

112 , DDD

3523 xxx │ 523 2 xx

91533 23 xxx 1x

xxx 523 23

9102 xx

27303 2 xx

523 2 xx

3232 x

1x

523 2 xx │ 1x

xx 33 2 13 x

55 x

1x

1x

0

12 xD

12 D

1, 223

DDD

11 D

fE

277251815 2346 xxxxx │ 3523 xxx

3456 35 xxxx 9923 xxx

277251510 2345 xxxxx 2345 35 xxxx

2772549 24 xxx

Page 39: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

39

xxxx 274599 234

274599 23 xxx

274599 23 xxx

99231 xxxE

2

12 D

DE

3523 xxx │ 1x

23 xx 322 xx

352 2 xx

xx 22 2

33 x

33 x

0

3222 xxE

3

23 D

DE

13 xE

2

11 E

EF

9923 xxx │ 322 xx

xxx 32 23 3x

963 2 xx

963 2 xx

0

31 xF

3

22 E

EF

322 xx │ 1x

xx 2 3x

33 x

Page 40: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

40

33 x

0

32 xF

33 EF

13 xF

3233

221 )1()3()3()( xxxFFFxf

Многочлен 277251815)( 2346 xxxxxxf имеет разложение в виде

32 )1()3()3( xxx .

Я составила программу для разложения многочлена на кратные

множители.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms,

Dialogs, StdCtrls, Grids;

type

TForm1 = class(TForm)

Edit1: TEdit;

Label1: TLabel;

SGd1: TStringGrid;

Label2: TLabel;

Button1: TButton;

Label3: TLabel;

SGd2: TStringGrid;

SGd3: TStringGrid;

SGd4: TStringGrid;

Edit6: TEdit;

procedure Button1Click(Sender: TObject);

Page 41: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

41

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

c,i,st1,st2,stiz,n_iz,n_nod,n,m,d_st,step,f:integer;

k,d,s:string;

kof1,kof2,k1,k2,izubst,a,b,a2,b2,buf,est,fxst:array[0..15] of integer;

izub,e,fx:array[0..50,0..50] of integer;

first:boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var i,j,k_1,st3,l:integer;

sokr:boolean;

k2_2,k1_1:array[0..10] of integer;

begin

st1:=StrToInt(Edit1.Text);

for i:=0 to st1 do begin

SGd4.Cells[i,0]:=SGd1.Cells[i,0];

end;

repeat

n_iz:=n_iz+1;

st2:=st1-1;

for i:=0 to st1 do begin

if SGd1.Cells[i,0]<>'' then

kof1[st1-i]:=StrToInt(SGd1.Cells[i,0])

Page 42: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

42

else MessageDlg('Внимание! Не введены значения

коэффициентов!',mtWarning,[mbOK],0);

end;

s:='f(x)=';

for i:=st1 downto 0 do begin

if kof1[i]<>0 then begin

if(kof1[i-1]<0)or(i=0) then begin

str(kof1[i],d);

str(i,k);

s:=s+d+'x^'+k;

end

else begin

str(kof1[i],d);

str(i,k);

s:=s+d+'x^'+k+'+';

end;

end;

kof2[i-1]:=kof1[i]*i;

end;

//Edit2.Text:=s;

s:='f1(x)=';

for i:=st2 downto 0 do begin

SGd2.Cells[st2-i,0]:=inttostr(kof2[i]);

if kof2[i]<>0 then begin

if(kof2[i-1]<0)or(i=1) then begin

str(kof2[i],d);

str(i-1,k);

s:=s+d+'x^'+k;

end

else begin

Page 43: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

43

str(kof2[i],d);

str(i-1,k);

s:=s+d+'x^'+k+'+';

end;

end;

//Edit3.Text:=s;

end;

for i:=0 to st1 do begin

kof1[i]:=StrToInt(SGd1.Cells[i,0]);

k1[i]:=StrToInt(SGd1.Cells[i,0]);

end;

for i:=0 to st2 do begin

kof2[i]:=StrToInt(SGd2.Cells[i,0]);

k2[i]:=StrToInt(SGd2.Cells[i,0]);

end;

while kof2[0]<>0 do begin

repeat

//Edit4.Text:='';

stiz:=0;

k_1:=k1[0];

if k1[0]<>kof2[0] then begin

if (k1[0] mod kof2[0])=0 then begin

for j:=0 to st2 do

k2[j]:=(k1[0] div kof2[0])*kof2[j];

end

else begin

if k2[0]<>1 then

for j:=0 to st1 do

k1[j]:=kof2[0]*k1[j];

if k_1<>1 then begin

Page 44: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

44

for j:=0 to st2 do

k2[j]:=k_1*kof2[j];

end;

end;

end;

for i:=1 to st1 do begin

k1[i-1]:=k1[i]-k2[i];

end;

st1:=st1-1;

until st1<st2;

if k1[0]<>0 then begin //Сокращение

sokr:=true;

for i:=1 to st1 do

if k1[i]<>0 then begin

if (k1[i] mod k1[0])<>0 then sokr:=false;

end;

k_1:=k1[0];

if sokr=true then

for i:=0 to st1 do

k1[i]:=k1[i] div k_1;

end;

for i:=0 to st2 do //Замена многочленов

k2_2[i]:=kof2[i];

for i:=0 to st1 do

k1_1[i]:=k1[i];

for i:=0 to 10 do begin

SGd3.Cells[i,0]:='';

SGd1.Cells[i,0]:='';

kof1[i]:=0;

k1[i]:=0;

Page 45: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

45

kof2[i]:=0;

k2[i]:=0;

izub[n_iz,i]:=0;

end;

izubst[n_iz]:=st2;

for i:=0 to st2 do begin

k1[i]:=k2_2[i];

SGd1.Cells[i,0]:=inttostr(k1[i]);

izub[n_iz,i]:=k1[i];

if k1[i]<>0 then begin

//Edit4.Text:=Edit4.Text+IntToStr(k1[i])+'x^'+IntToStr(st2-i);

end;

if (k2_2[i+1]>0)and(i<st2) then //Edit4.Text:=Edit4.Text+'+';

end;

for i:=0 to st1 do begin

k2[i]:=k1_1[i];

kof2[i]:=k1_1[i];

end;

st3:=st1;

st1:=st2;

st2:=st3;

end;

until (st1=0);

d_st:=StrToInt(Edit1.Text);

for i:=d_st+1 downto 1 do begin

kof1[i]:=StrToInt(SGd4.Cells[d_st-(i-1),0]);

end;

//Нахождение Е

first:=true;

for n_nod:=1 to n_iz do begin

Page 46: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

46

n:=d_st;

m:=izubst[n_nod];

d_st:=m;

for i:=n+1 downto 1 do begin

a[i]:=kof1[i];

end;

for i:=m+1 downto 1 do begin

b[i]:=izub[n_nod,m-(i-1)];

kof1[i]:=b[i];

end;

s:='f1(x)=';

for i:=n+1 downto 1 do begin

if a[i]<>0 then begin

if(a[i-1]<0)or(i=1) then begin

str(a[i],d);

str(i-1,k);

s:=s+d+'x^'+k;

end

else begin

str(a[i],d);

str(i-1,k);

s:=s+d+'x^'+k+'+';

end;

end;

end;

//Edit3.Text:=s;

s:='f2(x)=';

for i:=m+1 downto 1 do begin

if b[i]<>0 then begin

if(b[i-1]<0)or(i=1) then begin

Page 47: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

47

str(b[i],d);

str(i-1,k);

s:=s+d+'x^'+k;

end

else begin

str(b[i],d);

str(i-1,k);

s:=s+d+'x^'+k+'+';

end;

end;

end;

//Edit4.Text:=s;

for j:=n+1 downto 1 do begin

a2[j]:=a[j];

b2[j]:=0;

end;

step:=n-m;

f:=n+2;

for i:=step+1 downto 1 do begin

f:=f-1;

buf[i]:=a2[f];

for j:=m+1 downto 1 do begin

b2[j]:=buf[i]*b[j];

end;

for j:=f downto 1 do begin

a2[j]:=a2[j]*b[m+1];

end;

for j:=f downto 1 do begin

a2[j]:=a2[j]-b2[j+1-i];

b2[j]:=0;

Page 48: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

48

end;

end;

s:='h(x)=';

for i:=f+1 downto 1 do begin

e[n_nod,i]:=buf[i];

if buf[i]<>0 then begin

if(buf[i-1]<0)or(i=1) then begin

str(buf[i],d);

str(i-1,k);

s:=s+d+'x^'+k;

end

else begin

str(buf[i],d);

str(i-1,k);

s:=s+d+'x^'+k+'+';

end;

buf[i]:=0;

end;

end;

est[n_nod]:=f;

//Edit5.Text:=s;

s:='r(x)=';

for i:=n downto 0 do begin

if a2[i]<>0 then begin

if(a2[i-1]<0)or(i=1) then begin

str(a2[i],d);

str(i-1,k);

s:=s+d+'x^'+k;

end

else begin

Page 49: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

49

str(a2[i],d);

str(i-1,k);

s:=s+d+'x^'+k+'+';

end;

end;

end;

Edit6.Text:=s;

first:=false;

end;

for n_nod:=1 to n_iz-1 do begin

n:=est[n_nod];

m:=est[n_nod+1];

d_st:=m;

for i:=n+1 downto 1 do begin

a[i]:=e[n_nod,i];

end;

for i:=m+1 downto 1 do begin

b[i]:=e[n_nod+1,i];

kof1[i]:=b[i];

if n_nod=n_iz-1 then fx[n_iz,i]:=b[i];

end;

s:='f1(x)=';

for i:=n+1 downto 1 do begin

if a[i]<>0 then begin if(a[i-1]<0)or(i=1) then begin

str(a[i],d);

str(i-1,k);

s:=s+d+'x^'+k;

end

else begin

str(a[i],d);

Page 50: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

50

str(i-1,k);

s:=s+d+'x^'+k+'+';

end;

end;

end;

//Edit3.Text:=s;

s:='f2(x)=';

for i:=m+1 downto 1 do begin

if b[i]<>0 then begin if(b[i-1]<0)or(i=1) then begin

str(b[i],d);

str(i-1,k);

s:=s+d+'x^'+k;

end

else begin

str(b[i],d);

str(i-1,k);

s:=s+d+'x^'+k+'+';

end;

end;

end;

//Edit4.Text:=s;

for j:=n+1 downto 1 do begin

a2[j]:=a[j];

b2[j]:=0;

end;

step:=n-m;

f:=n+2;

for i:=step+1 downto 1 do begin

f:=f-1;

buf[i]:=a2[f];

Page 51: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

51

for j:=m+1 downto 1 do begin

b2[j]:=buf[i]*b[j];

end;

for j:=f downto 1 do begin

a2[j]:=a2[j]*b[m+1];

end;

for j:=f downto 1 do begin

a2[j]:=a2[j]-b2[j+1-i];

b2[j]:=0;

end;

end;

s:='h(x)=';

for i:=f+1 downto 1 do begin

fx[n_nod,i]:=buf[i];

if buf[i]<>0 then begin if(buf[i-1]<0)or(i=1) then begin

str(buf[i],d);

str(i-1,k);

s:=s+d+'x^'+k;

end

else begin

str(buf[i],d);

str(i-1,k);

s:=s+d+'x^'+k+'+';

end;

buf[i]:=0;

end;

end;

//Edit5.Text:=s;

fxst[n_nod]:=f;

s:='r(x)=';

Page 52: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

52

for i:=n downto 0 do begin

if a2[i]<>0 then begin if(a2[i-1]<0)or(i=1) then begin

str(a2[i],d);

str(i-1,k);

s:=s+d+'x^'+k;

end

else begin

str(a2[i],d);

str(i-1,k);

s:=s+d+'x^'+k+'+';

end;

end;

end;

Edit6.Text:=s;

end;

fxst[n_iz]:=est[n_iz]+1;

Edit6.Text:='';

s:='';

for i:=1 to n_iz do begin

s:=s+'(';

for j:=fxst[i] downto 0 do begin

if fx[i,j]<>0 then begin

if(fx[i,j-1]<0)or(j=1) then begin

str(fx[i,j],d);

str(j-1,k);

s:=s+d+'x^'+k;

end

else begin

str(fx[i,j],d);

str(j-1,k);

Page 53: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

53

s:=s+d+'x^'+k+'+';

end;

end;

end;

s:=s+')^'+IntToStr(i)+' ';

Edit6.Text:=Edit6.Text+s;

s:='';

end;

for i:=0 to 10 do begin

SGd1.Cells[i,0]:=SGd4.Cells[i,0];

end;

end;

end.

Page 54: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

54

Заключение

При выполнении дипломной работы я рассмотрела следующие

вопросы:

– делимость многочленов;

– деление многочленов с остатком;

– наибольший общий делитель, алгоритм Евклида;

– кратные корни;

– кратные множители, выделение кратных множителей;

– производные от многочленов.

Составила программы для нахождения частного и остатка при делении

многочленов; наибольшего общего делителя двух многочленов; производной

многочлена.

Page 55: АЛГОРИТМЫ С МГНОГОЧЛЕНАМИ

55

Список использованной литературы

1. Алгебра и теория чисел. Под ред. Н. Я. Виленкина. Москва:

Просвещение, 1984.

2. Архангельский А. Я. Программирование в Delphi 6. Москва: ЗАО

Бином, 2003.

3. Архангельский А. Я. Delphi 7. Справочное пособие. Москва:

ООО Бином-Пресс, 2004.

4. Курош А. Г. Курс высшей алгебры. Москва: Наука, 1971.

5. Ляпин Е. С., Евсеев А. Е. Алгебра и теория чисел. Часть II.

Линейная алгебра и полиномы. Москва: Просвещение, 1978.

6. Мантуров О. В. и др. Математика в понятиях, определениях и

терминах. Часть 2. Москва: Просвещение, 1982.

7. Попов В.Б. Turbo Pascal. Москва: Финансы и статистика, 2000.

8. Потапов М. К., Александров В. В., Пасиченко П. И. Алгебра и

анализ элементарных функций. Москва: Наука, 1980.

9. Сабинина Л. В. Математика в понятиях, определениях и

терминах. Часть I. Москва: Просвещение, 1978.

10. Сборник задач по алгебре. Под ред. А. И. Кострикина. Москва:

Наука, 1987.

11. Смолин Ю. Н. Алгебра и теория чисел. Перемь:1996.

12. Солодовников А. С., Родина М. А. Задачник-практикум по

алгебре. Часть IV. Москва: Просвещение, 1985.

13. Фадеев Д. К. Лекции по алгебре. Москва: Наука, 1984.

14. Фадеев Д. К., Соминский И. С. Сборник задач по высшей

алгебре. Москва: Наука, 1968.

15. Шварцбурд С. И. Избранные вопросы математики. Москва:

Просвещение, 1980.