Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.22;
Скачать: CL | DM;

Вниз

Задачка   Найти похожие ветки 

 
Зацени   (2006-10-02 17:08) [0]

Числа, равные сумме своих делителей (кроме себя самого), называются совершенными. Например, число 28 является совершенным: 28 = 1 + 2 + 4 + 7 + 14. Найти все совершенные числа от 1 до 10000
Вот подкинули мне такую задачу и я не знаю как её решать, помогите пожалуйста.Полного кода мне не нужно, а вот примерный алгоритм не помешает.


 
Ketmar ©   (2006-10-02 17:13) [1]

в школу. быстро. и попросить математичку, чтобы поставила побольше двоек. потому что алгоритм ты сам только что описал.


 
Слил   (2006-10-02 17:46) [2]

Я имею в виду алгоритм программы.Я знаю как найти делители:
Write;
Readln(a);
nd:=0;
for i:=2 to a div 2 do
if a mod i=0 then
begin
writeln;
Write(i:4);
nd:=nd+1;
end;
но что делать далбше не знаю вот и прошу помощи.


 
Ketmar ©   (2006-10-02 17:52) [3]

ну и? посчитать сумму делителей и проверить, равна ли она исследуюмому числу. ы?


 
Слил   (2006-10-02 17:54) [4]

Видишь в чем проблема у меня все делители выраженны одной переменной, и как посчитать их сумму я не знаю.


 
Ketmar ©   (2006-10-02 17:57) [5]

думай. в начале сумма, натурально, равна нулю. нашёл очередной делитель -- сразу прибавил его к искомой сумме. и так для всех. на выходе получаешь именно то, что хотел. больше разжёвывать не буду -- и так нарушил традицию "отсылки за метлой". %-)


 
MBo ©   (2006-10-02 17:58) [6]

sum:=1;
for i:=2 to a div 2 do
if (a mod i) = 0 then
 sum := sum + i;


 
Ketmar ©   (2006-10-02 17:59) [7]

>[6] MBo(c) 2-Oct-2006, 17:58
зачем воспитательный процесс нарушаешь? %-)


 
Слил   (2006-10-02 18:10) [8]

В данный момент нет паскаля под рукой но мне кажется что прога будет выглядить примерно так

nd:=0;
sum:=0;
for j:=1 to 1000 do begin
for i:=2 to a div 2 do
if a mod i=0 then
begin
sum:=sum+i
writeln;
if sum:=j then
Write(j:4);
end;
если что не так то обьясните почему, а то я только в 9 классе и мне надо ущнавать по больше


 
Ketmar ©   (2006-10-02 18:15) [9]

см. [6]


 
Слил   (2006-10-02 18:19) [10]

а что там?
я вроде сумму проверяю


 
Ketmar ©   (2006-10-02 18:24) [11]

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

хинт: алгоритм неверен.


 
Слил   (2006-10-02 18:51) [12]

Не знаю так или не так
sum:=0;
for a:=1 to 1000 do begin
for i:=2 to a div 2 do
if (a mod i)=0 then begin
sum:=sum+i;
if sum=a then
Write(sum:4);
end;
end;
но по другому не могу придумать.Плиз, если не правильно то подскажите где именно, и что я делаю не так.


 
Германн ©   (2006-10-02 18:57) [13]

1. sum нужно присваивать не 0, а 1 как в [6]
2. это нужно делать внутри цикла по а
3. проверку sum=a вынести за границу цикла по i



Страницы: 1 вся ветка

Текущий архив: 2006.10.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.037 c
15-1159800150
vidiv
2006-10-02 18:42
2006.10.22
Шашки


2-1159429147
Megabyte
2006-09-28 11:39
2006.10.22
Изменяемые сложные запросы


3-1156338842
Michael Makushev
2006-08-23 17:14
2006.10.22
Не удаляется ADO соединение со стороны сервера MSSQL


3-1156857379
return
2006-08-29 17:16
2006.10.22
Как пользоваться тригеррами ....


2-1160377062
Gloomer
2006-10-09 10:57
2006.10.22
Права доступа при открытии процесса