Составить
программу, печатающую разложение на простые множители заданного натурального числа n > 0 (другими словами, требуется печатать только простые числа и произведение напе-
чатанных чисел должно быть равно n; если
n = 1, печатать ничего не надо).
Решение (1 вариант).
k := n;
{инвариант: произведение напечатанных чисел и k
равно
n, напечатаны только простые
числа}
while not (k = 1) do begin
| l := 2;
| {инвариант: k не имеет делителей в
интервале (1,l)}
| while k mod l <> 0 do begin
| | l := l + 1;
| end;
| {l - наименьший делитель k,
больший 1, следовательно,
|
простой}
| writeln (l);
| k:=k div l;
end;
(2 вариант).
k := n; l := 2;
{произведение k и напечатанных чисел равно n; напеча-
танные числа просты; k не имеет
делителей, меньших l}
while not (k = 1) do begin
| if k mod l = 0 then begin
| | {k делится на l и не имеет делителей,
| | меньших l, значит, l просто}
| | k := k div l;
| | writeln (l);
| end else begin
| | { k не делится на l }
| | l := l + 1;
| end;
end;