Программа паскаль. пользователь вводит целое число, надо его вывести как несколько...

0 голосов
99 просмотров

Программа паскаль. пользователь вводит целое число, надо его вывести как несколько простых (пример 112=2*2*2*2*7)


Информатика (244 баллов) | 99 просмотров
Дан 1 ответ
0 голосов

Поиск простых делителей числа:

var i,j,n:longint;
    f:boolean;
begin
 writeln('Введите число');
 readln(n);
  if n<2 then writeln('Простых делителей нет')<br>  else
   begin
    write('Число ',n,' ','= 1');
    for i:=2 to n do
     if n mod i=0 then
      begin
       f:=true;
       j:=2;
       while f and(j<=round(sqrt(i/2)))do<br>        begin
         if i mod j=0 then f:=false
         else j:=j+1;
        end;
      if f then write('*',i);
     end;
   end;
end.

Тестовое решение:

Введите число
2345
Число 2345 = 1*5*7*35*67



(13.9k баллов)
0

var n : integer ; function foo ( i , d : integer ) : integer ; begin if ( d = i ) then writeln ( d ) else if ( ( i mod d ) = 0 ) then begin write ( d , '*' ) ; foo ( i div d , d ) ; end else begin while ( ( d <= i ) AND ( ( i mod d ) <> 0 ) ) do d := d + 1 ; foo ( i , d ) ; end ; end; begin write ('vvedite chislo n=' ) ; read ( n ) ; write ( n , '=' ) ; if ( n > 3 ) then foo ( n , 2 ) else writeln ( n ) ; end.

0

Думаю можно написать ещё короче, но я не очень владею именно паскалем, не знаю как оптимизировать код. На си, однако, покрасивее вышло бы.

0

что значит foo?

0

Просто имя функции. Функция должна иметь какое-нибудь имя, так же как и переменная должна иметь имя.

0

Здесь имеется функция, имя которой дано (произвольным образом) foo. Вообще, в алгоритме функция нужна чтобы перезапускаться заново после того, как выявила делитель числа. Нашла у числа делитель, разделила на него, и получила новое число, с котором та же процедура повторяется, и так пока число не сведётся к простому.

0

зачем do b+1?

0

Переменная d содержит проверяемый делитель. В начале программы (первый запуск foo ( n , 2) проверяемый делитель устанавливается в 2, и проверяется делимость числа на 2. Если делится, то число делится на 2 столько раз, сколько возможно, и в результате останется обрезанное число - частное от деления исходного на сколько имеется двоек.

0

Затем нужно пытаться проверить число на следующий делитель, для этого d увеличивается на 1. Таким образом, далее идёт проверка на делимость на 3, и так далее, пока в итоге от исходного числа не останется простое.

0

Затем на 4, но эта проверка в реале не сработает ни разу, потому что отсеялись двойки. Далее d увеличится до 5, и пойдёт проверка на делимость на 5, и так далее.