56 lines
1.0 KiB
Plaintext
56 lines
1.0 KiB
Plaintext
MODULE PrimeDecomposition;
|
|
|
|
FROM STextIO IMPORT
|
|
SkipLine, WriteLn, WriteString;
|
|
FROM SWholeIO IMPORT
|
|
ReadCard, WriteInt;
|
|
|
|
CONST
|
|
MaxFacIndex = 31;
|
|
(* 2^31 has most prime factors (31 twos) than other 32-bit unsigned integer. *)
|
|
|
|
TYPE
|
|
TFacs = ARRAY [0 .. MaxFacIndex] OF CARDINAL;
|
|
|
|
VAR
|
|
Facs: TFacs;
|
|
I, N, FacsCnt: CARDINAL;
|
|
|
|
PROCEDURE CalcFacs(N: CARDINAL; VAR Facs: TFacs; VAR FacsCnt: CARDINAL);
|
|
VAR
|
|
I: CARDINAL;
|
|
BEGIN
|
|
FacsCnt := 0;
|
|
IF N >= 2 THEN
|
|
I := 2;
|
|
WHILE I * I <= N DO
|
|
IF N MOD I = 0 THEN
|
|
N := N DIV I;
|
|
Facs[FacsCnt] := I;
|
|
FacsCnt := FacsCnt + 1;
|
|
I := 2
|
|
ELSE
|
|
I := I + 1
|
|
END
|
|
END;
|
|
Facs[FacsCnt] := N;
|
|
FacsCnt := FacsCnt + 1
|
|
END;
|
|
END CalcFacs;
|
|
|
|
BEGIN
|
|
WriteString("Enter a number: ");
|
|
ReadCard(N);
|
|
SkipLine;
|
|
CalcFacs(N, Facs, FacsCnt);
|
|
(* There is at least one factor *)
|
|
IF FacsCnt > 1 THEN
|
|
FOR I := 0 TO FacsCnt - 2 DO
|
|
WriteInt(Facs[I], 1);
|
|
WriteString(" ")
|
|
END;
|
|
END;
|
|
WriteInt(Facs[FacsCnt - 1], 1);
|
|
WriteLn
|
|
END PrimeDecomposition.
|