Предмет: Информатика, автор: Bulgarifullin2

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

Ответы

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

var i,j,n:longint;
    f:boolean;
begin
 writeln('Введите число');
 readln(n);
  if n<2 then writeln('Простых делителей нет')
  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
        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




NeznaikaNaLune2017: 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.
NeznaikaNaLune2017: Думаю можно написать ещё короче, но я не очень владею именно паскалем, не знаю как оптимизировать код. На си, однако, покрасивее вышло бы.
Bulgarifullin2: что значит foo?
NeznaikaNaLune2017: Просто имя функции. Функция должна иметь какое-нибудь имя, так же как и переменная должна иметь имя.
NeznaikaNaLune2017: Здесь имеется функция, имя которой дано (произвольным образом) foo. Вообще, в алгоритме функция нужна чтобы перезапускаться заново после того, как выявила делитель числа. Нашла у числа делитель, разделила на него, и получила новое число, с котором та же процедура повторяется, и так пока число не сведётся к простому.
Bulgarifullin2: зачем do b+1?
NeznaikaNaLune2017: Переменная d содержит проверяемый делитель. В начале программы (первый запуск foo ( n , 2) проверяемый делитель устанавливается в 2, и проверяется делимость числа на 2. Если делится, то число делится на 2 столько раз, сколько возможно, и в результате останется обрезанное число - частное от деления исходного на сколько имеется двоек.
NeznaikaNaLune2017: Затем нужно пытаться проверить число на следующий делитель, для этого d увеличивается на 1. Таким образом, далее идёт проверка на делимость на 3, и так далее, пока в итоге от исходного числа не останется простое.
NeznaikaNaLune2017: Затем на 4, но эта проверка в реале не сработает ни разу, потому что отсеялись двойки. Далее d увеличится до 5, и пойдёт проверка на делимость на 5, и так далее.
Похожие вопросы
Предмет: Алгебра, автор: dvorko67
Предмет: Химия, автор: Аноним
Предмет: Математика, автор: xajrullina1967
Предмет: Математика, автор: 123456795003