Я составила программу для нахождения частного и остатка.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
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;
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
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];
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;
end;
end;
Edit6.Text:=s;
end;
end.
Пусть даны произвольные многочлены
В общем же случае многочлены
Наибольшим общим делителем отличных от нуля многочленов
Это определение оставляет открытым вопрос, существует ли наибольший общий делитель для любых многочленов
Алгоритм Евклида– метод для нахождения наибольшего общего делителя двух целых чисел, а также двух многочленов от одного переменного. Он первоначально был изложен в «Началах» Евклида в геометрической форме как способ нахождения общей меры двух отрезков. Алгоритм Евклида для нахождения наибольшего общего делителя, как в кольце целых чисел, так и в кольце многочленов от одного переменного является частным случаем некого общего алгоритма в евклидовых кольцах.
Алгоритм Евклида для нахождения наибольшего общего делителя двух многочленов
Для доказательства запишем изложенное в виде следующей цепочки равенств:
(2.4)
Последнее равенство показывает, что
Возьмем теперь произвольный общий делитель