Помощь - Поиск - Пользователи - Календарь
Полная версия: нахождение полных чисел
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-Artur-
Доброго времени суток !
Срочно нужна помощь.
Задача: Полные числа - это такие числа которые равны всем своим делителям (за исключением самого себя). Пример: 6=3+2+1 (6 делится на 3, 2 и 1). Найти все полные числа от 1 до 10000. Ответы даны: 6, 28, 496, 8128.
Не имею представления как написать такую программу в паскале, что бы она нашла эти числа.
Помогите пожалуйста, буду очень благодарен.
Заранее спасибо ! smile.gif
volvo
Вообще-то эти числа называются "Совершенные": Замечательные числа
-Artur-
Спасибо volvo, очень помогло.
использовал эту программу:
Var
I,N,Summa: LongInt;
Delitel: Integer;
Begin
For I := 1 To 10000 Do Begin
Summa := 1;
For Delitel := 2 To Trunc(Sqrt(I)) Do Begin
N := (I Div Delitel);
If N * Delitel = I Then Summa := Summa + Delitel + (I Div Delitel);
End;

If Int(Sqrt(I)) = Sqrt(I) Then Summa := Summa - Trunc(Sqrt(I));

If I = Summa Then WriteLn(I, ' - ', Summa);
End;
End.

Программа показывает числа так:
6 - 6
28 - 28
496 - 496
8128 - 8128

Можно ли сделать что бы эти числа писались 1 раз, а не 2 раза через дефиз ? (А то учитель может придраться :D )
И после этого выйти из программы нельзя. Прописал в конце readln; не помогло.
И последнее, к программе мне нужно написать описание каждой строчки, тоесть что каждая строчка выпоняет (описать эти команды). Ну строки var, begin, и end я описать могу :D А вот во всех формулах и кодах которые тут присутствуют я не шарю. Может кто - то поможет? А то без описания строк работу не примут. :/

P.S volvo пробывал использовать твою программу (то что добавлено), там и строки описаны, но она у меня не работает. Хотя я просто скопировал всю программу от начала до конца, может чего лишнего взял (так как не понимаю толком smile.gif )
-Artur-
Извеняюсь, добавление в конце readln; помогло.
отсалось только 2 вопроса6 можно ли сделать что бы числа псиались 1 раз без дефиса, и описание строк очень нужно :/
Michael_Rybak
прочитай хоть что-нибудь сам по паскалю. про структуру программы вообще, про арифметические операции, про if-then-else, for-do и writeln. и сам напиши комментарии.
-Artur-
да согласен, прочитать мне не помешает, но на это время нужно, а мне к понедельнику сделать надо.
Впочем мне нужно всего несколько описаний:
I,N,Summa: LongInt; - вот эта строчка нужна, не понимаю что она означает.
И соответственно исходя из этой строчки что значит For I :=
Ещё не знаю N := (I Div Delitel); - что такое div не знаю.
If Int(Sqrt(I)) = Sqrt(I) - и вот это неопнтяно.
Всего несколько строк, очень нужно :/
И как сделать что бы числа писались 1 раз через запятую или в столбик неважно, но 1 раз, а не повторно через тире.
Michael_Rybak
Что такое "I,N,Summa: LongInt;" ты узнаешь, потратив 5 полезных минут на ознакомление со структурой программ на паскале. Так и напиши в гугле - "паскаль. структура программы".

Что такое for ты узнаешь, ознакомившись с конструкцией for-do.

Что такое div ты узнаешь, ознакомившись с арифметическими операциями.

If Int(Sqrt(I)) = Sqrt(I) - эта строчка означает - "Если I является полным квадратом, то...". Более конкретно - Sqrt(I) вычисляет квадратный корень из I. Int(Sqrt(I)) берет от квадратного корня целую часть. Таким образом, вся строка означает дословно - "Если целая часть квадратного корня из I равна квадратному корню из I, то ...". Другими словами, "Если квадратный корень из I - целое число, то...".

До понедельника времени - море.

Удачи.
-Artur-
Спасибо smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.