Помощь - Поиск - Пользователи - Календарь
Полная версия: Разложение натурального числа
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Tribunal
Задание:разложить натуральное число N на простые множители

я сделала программу,но она в конце выводит совсем ненужный 0...
подскажите,пожалуйста,как этого избежать?

var
  mn: array [1..100] of integer;
  i,k,n,kol:integer;

begin

  write('Vvedite naturalnoe chislo n=');readln(n);
  writeln('Razlojim naturalnoe chislo n na prostie mnojiteli:');

  i:=1;k:=3;
  repeat
   if ((k mod 2)<>0) and ((n mod k) = 0) then begin
                         n:=trunc(n/k);
                         mn[i]:=k;
                         write(mn[i],' ');
                         inc(i);
                         end
   else inc(k);
  until n=1;
  kol:=i;
  writeln;

  i:=0;
  while i<kol do
   begin
     inc(i);
     repeat
      k:=1;
      if (i<kol) and (mn[i]=mn[i+1]) then begin
                                          inc(k);
                                          inc(i);
                                          end;
     until (i<=kol) or (mn[i]<>mn[i+1]) ;
     write(mn[i],'^',k,' ');
   end;
  readln;
end.
volvo
Поиском пользоваться не пробовала?
Разложение числа на простые множители...
Tribunal
дело в том,что я хочу вывести результат в виде
простых сомножителей с соотвествующими степенями...
собственно в выводе этого результата и состоит проблема...
посмотри,пожалуйста...
volvo
Tribunal, ты будешь смеяться, но у меня никакой 0 не выводится... Программа просто зацикливается и печатает -1 и -2... smile.gif Что я неправильно делаю? Ввел число 20...
volvo
Цитата(Tribunal @ 7.06.2006 16:06) *
собственно в выводе этого результата и состоит проблема...

Так:
var
  mn: array [1..100] of integer;
  i,k,n:integer;

begin

  write('Vvedite naturalnoe chislo n=');readln(n);
  writeln('Razlojim naturalnoe chislo n na prostie mnojiteli:');

  k:=2;
  repeat

   if (n mod k) = 0 then begin
     n := n div k;
     inc(mn[k]);
     write(k, ' ');
   end
   else inc(k, 2 - byte(k = 2));

  until n=1;

  writeln;

  i := 1;
  while i <= k do begin { <--- Изменил !!! }
    if mn[i] > 0 then write(i, '^', mn[i], ' ');
    inc(i);
  end;
  readln;
end.

?
Tribunal
а у меня ваша программа не всегда работает...)

например,258,456...то есть видимо четные чмсла...
volvo
Посмотри теперь - я кое- что подправил (хотя и так разложение работало, просто со степенями глюки были)... Заодно прикрепляю то, как я вижу результат у себя:
Tribunal
круто...пасиба))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.