Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2007, 16:59   #1
NikLik
Форумчанин
 
Аватар для NikLik
 
Регистрация: 22.11.2007
Сообщений: 224
По умолчанию Нахождение совершенных чисел. Паскаль

"Натуральное число называют совершенным, если оно равно сумме своих простых делителей, не считая его самого (например, 6=1+2+3 --соверешнное число*). Составьте алгоритм, проверяющий, является ли введённое число совершенным"
*задачка из довольно-таки старого учебника, в настоящее время 1 не считается простым числом.
Это задачка в целом.
Просьба у меня может не совсем обычная-- я не прошу дать мне код программы, я прошу помочь мне разобраться.
Итак, если разбивать программу на этапы то их получится 3:
1) Раскладываем число на простые делители.
2) Суммируем простые делители.
3) Сравниваем получившуюся сумму и заданное число.
Натолкните меня, пожалуйста, на мысль--каким образом можно разложить число на простые делители? Для этого нам потребуется сначала сгенерировать простые числа в диапазоне [2..n], где n-- заданное число.
Каким образом их можно сгенерировать? Если можно, не код программы, а мысль )
NikLik вне форума Ответить с цитированием
Старый 23.11.2007, 17:27   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

1. Действительно, сначала нужно найти все простые чичла от 2 до n, хотя можно и чуть меньше, т.к. если мы например задали число 6 то сумма первых 6 простых чисел равна 29 (включая единицу). Решение этой задачи явидел пару раз на форуме и почти во всех учебниках.
2. В цикле типа
Код:
while sum<=N do
считаем сумму простых чисел по-порядку. Если в конце цикла sum=N, то ДА, если нет, то НЕТ.
puporev вне форума Ответить с цитированием
Старый 23.11.2007, 21:40   #3
Abbatik
Форумчанин
 
Аватар для Abbatik
 
Регистрация: 11.11.2007
Сообщений: 136
По умолчанию

в общем простое число у которого два делителя: единица и оно само!
Код:
for i:=1 to n do begin
k:=0;
for j:=1 to n do begin
if i mod j=0 then k:=k+1;
end;
if k=2 then <простое> else <составное>
end;
ICQ - 446037211
Abbatik вне форума Ответить с цитированием
Старый 23.11.2007, 22:19   #4
NikLik
Форумчанин
 
Аватар для NikLik
 
Регистрация: 22.11.2007
Сообщений: 224
По умолчанию

спасибо, разобрался.
Но есть 1 нюанс:
В википедии написано что совершенное число состоит из суммы своих делителей(не важно,простые они или нет). В задаче же указано, что делители должны быть простыми числами.
Я решил согласиться с википедией( кода меньше строчек на 10):
Код:
program soversh;
var n,i,sum:longint;
begin
writeln('vvedite 4islo');
read(n);
i:=1;
while i<n
do
if ((n mod i)=0) then
begin
sum:=sum+i;
i:=i+1;
end
else
i:=i+1;
if sum=n
then writeln('sovershennoe')
else writeln('nesovershennoe');
end.
NikLik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нахождение суммы четных чисел в массиве Ci_novice Общие вопросы C/C++ 1 23.12.2007 12:11
задача:Паскаль и ряд чисел Фибоначчи SEREG@ Помощь студентам 20 16.12.2007 20:05
нахождение полных чисел Juhn Паскаль, Turbo Pascal, PascalABC.NET 6 09.12.2007 13:14
Нахождение подпапок. Паскаль NikLik Помощь студентам 0 25.11.2007 21:51
Нахождение чисел в таблице базы данных на Delphi!, Помогите пожалуй Рина БД в Delphi 0 13.03.2007 19:21