Составить программу, печатающую разложение на простые множители заданного натурального числа 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;



2009-12-04 • Просмотров [ 2968 ]