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



Плизз помогите как начать решать
Unconnected
Можно так:


Procedure divz(n:integer);
var i:byte;
begin
for i:=1 to n do if (n mod i=0) then writeln(i);
end;

var n:integer;
begin
writeln('Vvedite N');
readln(n);
divz(n);
readln;
end.
Lapp
Цитата(Unconnected @ 5.04.2010 21:51) *
  for i:=1 to n do if (n mod i=0) then writeln(i);

Вопрос: нужно ли делать цикл аж до n? ))
Unconnected
А почему бы и нет?) n тоже является делителем самого себя...
volvo
Цитата
n тоже является делителем самого себя...
Для того, чтобы это показать - совсем не обязательно цикл продолжать до N. Все проще гораздо...
Unconnected
Вот так:

Procedure divz(n:integer);
var i:byte;
begin
writeln(n);
for i:=1 to (n div 2) do if (n mod i=0) then begin
writeln(i);
end;
end;

var n:integer;
begin
writeln('Vvedite N');
readln(n);
divz(n);
readln;
end.


Т.к. из двух множителей один не может быть меньше двух в нашем случае.
Lapp
Цитата(Unconnected @ 6.04.2010 20:27) *
Вот так:
  for i:=1 to (n div 2) do if (n mod i=0) then begin ...

Т.к. из двух множителей один не может быть меньше двух в нашем случае.
Гм. Тогда, может быть, и начинать не с 1? smile.gif

Unconnected, думай дальше. Ты прошел некоторую часть пути, но не до конца )).
TarasBer
Можно даже до половины не идти.
Lapp
Цитата(TarasBer @ 7.04.2010 12:23) *
Можно даже до половины не идти.
Именно так yes2.gif . Но уважаемый Un отмалчивается.. smile.gif
Unconnected
Ммм ну не знаю, я с циклом for ничего больше не придумал, кроме как:

Procedure divz(n:integer);
var i,i2:byte;
begin
writeln(n);
i2:=1;
for i:=n div 2 downto i2 do if (n mod i=0) then begin
writeln(i);
inc(i2,n div i);
end;
end;

var n:integer;
begin
writeln('Vvedite N');
readln(n);
divz(n);
readln;
end.



Но тут количество итераций то же самое вроде. Есть подозрение, что там можно делать допустим n div 5 и потом что-то домножать, но не додумался до конца)
Client
lol.gif
думаю, имелось в виду после цикла сделать
writeln(n);

И можно идти до значения корня из числа smile.gif
Unconnected
Цитата

И можно идти до значения корня из числа smile.gif


И как ты себе это представляешь?smile.gif
Client
for i:=2 to round (sqrt(n) )
Lapp
Цитата(Client @ 8.04.2010 14:13) *
for i:=2 to round (sqrt(n) )
Угу )). Только можно даже не Round, а Trunс.
И есть еще одна вещь, которую следует упомянуть..
Client
тут возможно:
1) можно включить и единицу
2) возможно есть делитель n/2
3) ну и само число n
smile.gif
TarasBer
Народ, автор же ещё даже ни одного ответа не сделал. А то так всё и раскроем.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.