Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] Вывести все делители числа q


Автор: nitrak 25.12.2006, 20:37
даны целые числа p и q.
Вывести все делители числа q
взаимно простые с числом p.
Взаимно простые числа не имеют общих делителе кроме 1

Автор: achepkunov 25.12.2006, 22:55
Найди сначала все делители q

Автор: nitrak 7.1.2007, 19:07
Код

   VAR
p,q,d: integer;


begin
writeln(BBOD HATYPA/\bHOrO q:');readln(q);
if (q<0) then writeln('ERROR')
else
writeln(BBOD HATYPA/\bHOrO  p:');readln(p);
if (p<0) then writeln(RUS('ERROR'))
else
writeln(HAXO}l{DEHUE DE/\UTE/\Eu*');
d:=q;
while(d<>0) do
begin
if (q mod d = 0) then
                 begin
                 writeln('',d);


                 d:=d-1;
                 end
else
 d:=d-1;

 end;
 readln;


end.

а дальше неполучается.... smile

Добавлено @ 19:10 
Фигню напиал.. ща исправлю..
Код

   VAR
p,q,d: integer;


begin
writeln(wwod natyral'nogo q:');readln(q);
if (q<0) then writeln('ERROR')
else
writeln(wwod natural'nogo p:');readln(p);
if (p<0) then writeln('ERROR')
else
writeln('Naxozhdenie delitelej ');
d:=q;
while(d<>0) do
begin
if (q mod d = 0) then
                 begin
                 writeln('',d);


                 d:=d-1;
                 end
else
 d:=d-1;

 end;
 readln;


end.

Автор: Akina 7.1.2007, 23:24
Раскладываешь на делители P
Раскладываешь на делители Q
Из делителей P выкидываешь все, что имеются у Q
Из того что осталось собираешь все что можно собрать.

Пример

P = 180
Q = 14

Делители P:
2 2 3 3 5

Делители Q:
2 7

Делители в P, отсутствующие в Q:
3 3 5

Составляем всевозможные числа их перемножением:

3
5
9
15
45

Автор: achepkunov 8.1.2007, 02:40
Akina, 
Ловко, только можно даже делители q не искать - если раскладывать p на простые делители, то достаточно того, чтобы на них не делился сам q.

Но лучше разложить q, поделить на все что можно p, и потом уже искать все делители уменьшенного p. 

В том же примере (180 и 14) - раскладываем 14, находим 2, делим 180 на 2 до упора (2 раза получится), далее находим 7, делим получившееся 45 до упора на 7 (0 раз), получившееся 45 и раскладываем.

Добавлено @ 02:44 
nitrak, 

Молодец!

т.е. надо в том же цикле в районе 19 строчки вставить цикл по уменьшению p. Справишься? 

Чтобы программа работала быстрее, можно еще потом внешний цикл сделать не с уменьшением d а с увеличением, и при нахождении делителя уменьшать q так же как и p.

Но сначала, из любви к красоте, взгляни на такую запись твоего цикла:
Код

    while(d<>0) do    
    begin    
        if (q mod d = 0) then    
        begin    
                 writeln('', d);    {вот здесь бужет вложенный цикл}
        end;    
        d := d-1;    
    end;


Обрати внимание на d:=d-1;. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)