RosettaCodeData/Task/Prime-decomposition/Pascal/prime-decomposition-2.pascal

47 lines
919 B
Plaintext

Program PrimeDecomposition(output);
type
DynArray = array of integer;
procedure findFactors(n: Int64; var d: DynArray);
var
divisor, next, rest: Int64;
i: integer;
begin
i := 0;
divisor := 2;
next := 3;
rest := n;
while (rest <> 1) do
begin
while (rest mod divisor = 0) do
begin
setlength(d, i+1);
d[i] := divisor;
inc(i);
rest := rest div divisor;
end;
divisor := next;
next := next + 2; // try only odd numbers
// cut condition: avoid many useless iterations
if (rest < divisor * divisor) then
begin
setlength(d, i+1);
d[i] := rest;
rest := 1;
end;
end;
end;
var
factors: DynArray;
j: integer;
begin
setlength(factors, 1);
findFactors(1023*1024, factors);
for j := low(factors) to high(factors) do
writeln (factors[j]);
readln;
end.