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.