SCAR Code:
program New;
var
GCF, A1, A2, B1, B2: Integer;
function Factor(var GCF, A1, A2, B1, B2: Integer; A, B, C: Integer): Boolean;
var
Product1, Factor1, Factor2, Product2, Modee, Remainder, Modder: Integer;
begin
if (A = 0) or (C = 0) then
begin
Result := false;
Exit;
end;
if A < 0 then
begin
GCF := -1;
A := -A;
B := -B;
C := -C;
end else
begin
GCF := 1;
end;
Modder := A;
Modee := Round(Abs(B));
Remainder := Modee;
while Remainder > 0 do
begin
Modee := Modder;
Modder := Remainder;
Remainder := Modee mod Modder;
end;
Modder := Modder;
Modee := Round(Abs(C));
Remainder := Modee;
while Remainder > 0 do
begin
Modee := Modder;
Modder := Remainder;
Remainder := Modee mod Modder;
end;
GCF := GCF * Modder;
A := A / GCF;
B := B / GCF;
C := C / GCF;
Product1 := A * C;
Product2 := 0;
if C < 0 then
begin
Factor2 := Round(Abs(B)) - 1;
Factor1 := -1;
while Product2 < -Product1 do
begin
Factor2 := Factor2 + 1;
Factor1 := Factor1 + 1;
Product2 := Factor2 * Factor1;
end;
end else
begin
Factor2 := Round(Abs(B));
Factor1 := 0;
while Factor2 >= Factor1 do
begin
Product2 := Factor2 * Factor1;
if Product2 = Product1 then
begin
Break;
end;
Factor2 := Factor2 - 1;
Factor1 := Factor1 + 1;
end;
end;
if not(Abs(Product1) = Product2) then
begin
Result := False;
Exit;
end;
if C < 0 then
begin
if B < 0 then
begin
A2 := -Max(Factor2, Factor1);
B2 := Min(Factor2, Factor1);
end else
begin
A2 := Max(Factor2, Factor1);
B2 := -Min(Factor2, Factor1);
end;
end else
begin
A2 := Factor2 * (B / Round(Abs(B)));
B2 := Factor1 * (B / Round(Abs(B)));
end;
A1 := A;
B1 := A;
Modder := Round(Abs(A2));
Modee := A1;
Remainder := Modee;
while Remainder > 0 do
begin
Modee := Modder;
Modder := Remainder;
Remainder := Modee mod Modder;
end;
A1 := A1 / Modder;
A2 := A2 / Modder;
Modder := Round(Abs(B2));
Modee := B1;
Remainder := Modee;
while Remainder > 0 do
begin
Modee := Modder;
Modder := Remainder;
Remainder := Modee mod Modder;
end;
B1 := B1 / Modder;
B2 := B2 / Modder;
Result := true;
end;
begin
if (Factor(GCF, A1, A2, B1, B2, 42, 91, 42)) then
begin
WriteLn('(' + IntToStr(GCF) + ')(' + IntToStr(A1) + 'x+' +
IntToStr(A2) + ')(' + IntToStr(B1) + 'x+' + IntToStr(B2) + ')');
end;
end.