Да се разложи число на прости делители

Да се напише програма, която:

  • позволява да се въведе число и го отпечатва, разложено на прости делители
    например въвеждаме 18 и отпечатва 2 3 3; въвеждаме 23 и отпечатва 23 (понеже е просто)
  • отпечатва всички числа в интервала [a, b], разложени на прости множители.
Публикувано в с етикети . Постоянна връзка.

2 коментара по Да се разложи число на прости делители

  1. kaloyan каза:

    Програмата може да разлага само до 41

    VAR chislo : integer;
    BEGIN
         writeln('vavedi chislo: '); readln(chislo);
    
               repeat
                 if chislo mod 2 = 0 then
                    begin
                         writeln('2');
                         chislo:=chislo div 2;
                    end;
               until(chislo mod 2 <> 0);
    
               repeat
                 if chislo mod 3 = 0 then
                    begin
                         writeln('3');
                         chislo:=chislo div 3;
                    end;
               until(chislo mod 3 <> 0);
    
               repeat
                 if chislo mod 5 = 0 then
                    begin
                         writeln('5');
                         chislo:=chislo div 5;
                    end;
               until(chislo mod 5 <> 0);
    
               repeat
                 if chislo mod 7 = 0 then
                    begin
                         writeln('7');
                         chislo:=chislo div 7;
                    end;
               until(chislo mod 7 <> 0);
    
               repeat
                 if chislo mod 11 = 0 then
                    begin
                         writeln('11');
                         chislo:=chislo div 11;
                    end;
               until(chislo mod 11 <> 0);
    
               repeat
                 if chislo mod 13 = 0 then
                    begin
                         writeln('13');
                         chislo:=chislo div 13;
                    end;
               until(chislo mod 13 <> 0);
    
               repeat
                 if chislo mod 17 = 0 then
                    begin
                         writeln('17');
                         chislo:=chislo div 17;
                    end;
               until(chislo mod 17 <> 0);
    
               repeat
                 if chislo mod 19 = 0 then
                    begin
                         writeln('19');
                         chislo:=chislo div 19;
                    end;
               until(chislo mod 19 <> 0);
    
               repeat
                 if chislo mod 23 = 0 then
                    begin
                         writeln('23');
                         chislo:=chislo div 23;
                    end;
               until(chislo mod 23 <> 0);
    
               repeat
                 if chislo mod 29 = 0 then
                    begin
                         writeln('29');
                         chislo:=chislo div 29;
                    end;
               until(chislo mod 29 <> 0);
    
               repeat
                 if chislo mod 31 = 0 then
                    begin
                         writeln('31');
                         chislo:=chislo div 31;
                    end;
               until(chislo mod 31 <> 0);
    
               repeat
                 if chislo mod 37 = 0 then
                    begin
                         writeln('37');
                         chislo:=chislo div 37;
                    end;
               until(chislo mod 37 <> 0);
    
               repeat
                 if chislo mod 41 = 0 then
                    begin
                         writeln('41');
                         chislo:=chislo div 41;
                    end;
               until(chislo mod 41 <> 0);
    
    readln;
    END.
    
    • Данаил каза:

      Калояне, адмирации за решението, но е твърде усложнено. Вгледай се в задачата – виж че има повтарящи се блокове – това е явна индикация, че вместо тях трябва да има цикъл, в който този блок се среща само веднъж. А местата, които са различни между отделните блокове, ти показват къде трябва да има управляващи променливи или изрази, свързани с тях. Ако те притеснява това, че няма как с цикъл да изреждаш само простите числа – то достатъчно е да започваш от 2 нагоре и да увеличаваш делимото с 1 – така първо ще се мине през простите делители и ако числото не се дели на тях, ще продължи към следващите нагоре.

Вашият коментар