Программа для разложения числа на произведение просты

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Программа для разложения числа на произведение просты

Сообщение fs444 » 13.10.2008 17:31:24

Есть задание:
разложение числа на произведение простых чисел.JPG

В голове крутиться мысль про использование операторов For, только никак не могу ее прояснить. Ведь множителей, как я понял, может быть и два, и три, и десять? Как узнать, сколько именно их должно быть?
fs444
новенький
 
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

Re: Программа для разложения числа на произведение прос

Сообщение Михаил Крамер » 13.10.2008 19:02:32

Чегой-то у нас ветка в решебник превращается. Ну так попробовать можно:

Код: Выделить всё
var
   numb, powers: array [1..100] of integer;
   c, n, n1, i: integer;
begin
   c:= 120;
   n:= 1;
   n1:= 0;
   while c <> 1 do
   begin
      i:= 2;
      while c mod i <> 0 do
        Inc(i);
      Inc(n1);
      if n1 = 1 then
      begin
         numb[n]:= i;
         powers[n]:= 1;
      end
      else if numb[n] = i then Inc(powers[n])
      else
      begin
         Inc(n);
         numb[n]:= i;
         powers[n]:= 1;
      end;
      c:= c div i;
   end;
   writeln(n);
   write('num = ');
   for i:= 1 to n do
   begin
     write(numb[i], ' ^ ', powers[i]);
     if i <> n then write(' * ');
   end;
   writeln;
end.


Сделал для одного числа, для многих, думаю разберётсь. Может кто лучше напишет - писал на работе между делом.
Михаил Крамер
новенький
 
Сообщения: 73
Зарегистрирован: 08.02.2008 14:26:40

Re: Программа для разложения числа на произведение прос

Сообщение fs444 » 14.10.2008 22:53:06

Чегой-то у нас ветка в решебник превращается

Ну это потому что я паскаль по учебнику изучаю, поэтому и преваращается ) А до меня что из себя эта ветка представляла? :)
fs444
новенький
 
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

Re: Программа для разложения числа на произведение прос

Сообщение Deepthroat » 15.10.2008 00:13:23

[offtop]
Прочитал название темы (про разложение числа на простые сомножители) и уже было подумал, что кто-то алгоритмы шифрования с открытым ключем ломать решил :mrgreen:
[/offtop]
Аватара пользователя
Deepthroat
постоялец
 
Сообщения: 144
Зарегистрирован: 06.09.2007 00:21:34
Откуда: Outer Heaven

Re: Программа для разложения числа на произведение прос

Сообщение shade » 15.10.2008 18:58:31

Года 4 назад решал примерно таким образом:
Код: Выделить всё
var
  N: Integer;
  x, p: Integer;
begin
  readln(N);
  if N <= 0 then
  begin
    writeln('Error: N <= 0');
    exit;
  end; // if
  if N <= 1 then
  begin
    writeln(1);
    exit;
  end; // if
  x := 2;
  while x < sqrt(N) do
  begin
    if (N mod x) = 0 then
    begin
      p := 1;
      N := N div x;
      while (N mod x) = 0 do
      begin
        N := N div x;
        p := p + 1;
      end; // if
      writeln(x, '^', p);
    end; // if
    x := x + 2;
  end; // while
  if N > 1 then
  begin
    writeln(N, '^1');
  end; // if
end.


Оригинальное решение где-то далеко в бекапах - потому восстанавливал по памяти, может что забыл :(

(фишка в том, что по раскладываемое число уменьшается за чет выкидывания уже найденых делителей: уменьшается число - уменьшается число перебираемых значений)
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Программа для разложения числа на произведение прос

Сообщение fs444 » 18.10.2008 23:53:10

А что значит
// if
и
// while
в некоторых местах программы? Это ты комментарий так обозначил? Комментарии же вроде фигурными скобками {...} обозначаются.
fs444
новенький
 
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

Re: Программа для разложения числа на произведение прос

Сообщение Deepthroat » 19.10.2008 13:11:33

В Delphi и FPC комментарии могут обозначаться так:

{ многострочный комментарий }
(* многострочный комментарий *)
//однострочный комментарий

В TurboPascal, если мне не изменяет память, однострочных комментариев нет.
Аватара пользователя
Deepthroat
постоялец
 
Сообщения: 144
Зарегистрирован: 06.09.2007 00:21:34
Откуда: Outer Heaven

Re: Программа для разложения числа на произведение прос

Сообщение fs444 » 19.10.2008 13:17:52

"//" строку не комментит, значит таких однострочных комментариев в TurboPascal нет. Может, shade спутал с чем-то?
fs444
новенький
 
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

Re: Программа для разложения числа на произведение прос

Сообщение Deepthroat » 19.10.2008 17:01:25

Ничего он не спутал. Вы же не думаете, что Shade использовал TurboPascal?! И Вам зачем именно TurboPascal, не понятно. Скачайте fpc и тренируйтесь в нем.
Аватара пользователя
Deepthroat
постоялец
 
Сообщения: 144
Зарегистрирован: 06.09.2007 00:21:34
Откуда: Outer Heaven

Re: Программа для разложения числа на произведение прос

Сообщение SergeySmlInf » 21.10.2008 17:24:52

Ребята! Для Ваших задач лучше всего - ABCPascal = и учебный, и с учебником, и под любую винду...
SergeySmlInf
новенький
 
Сообщения: 40
Зарегистрирован: 02.10.2007 07:59:26
Откуда: Смоленск

Re: Программа для разложения числа на произведение прос

Сообщение NXP » 21.10.2008 18:56:24

Deepthroat писал(а):Скачайте fpc и тренируйтесь в нем.

+1
ИМХО Не используйте устаревшие, проприетарные, и прочие наркотические
вещества, подсаживающие личность на Micro$oft :lol:
Аватара пользователя
NXP
постоялец
 
Сообщения: 187
Зарегистрирован: 02.01.2008 16:11:56
Откуда: Воронеж


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru