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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2007, 15:56   #1
klarissa
 
Регистрация: 22.12.2007
Сообщений: 4
По умолчанию (pascal) задача с совершенными числами

прошу помочь с задачкой
>>Найти совершенные числа от 2 до N. Значение N ввести с клавиатуры.

у меня получилось такое решение, но как мне говорят здесь полно ошибок ::

Код:
Program lol;
Uses crt;
K,n,h:integer;
i,j:integer;
Begin
Clrscr
Writeln (‘input n');
K:=0;
For i:=2 to n do
begin
For i:=2 to n do
K:=0 For i:=1 to n-1 do
If n mod i=0 then k=k+1; {нахождение остатка от делителя на n}
If k=n then 
Writeln (‘n-tseloe chislo’) else
Writeln (‘n-netseloe chislo’);
End;
End.
помогите плиз исправить

Последний раз редактировалось klarissa; 26.12.2007 в 16:01.
klarissa вне форума Ответить с цитированием
Старый 26.12.2007, 16:41   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

У вас сплошная путаница с циклами.
Зачем два раза
For i:=2 to n do
begin
For i:=2 to n do
Потом опять For i:=1 to n-1 do
Потом не n mod i=0, а if i mod j=0 then
Два раза к:=0;
На выходе пишите целое-не целое, когда нужно совершенное.
И почитайте что-нибудь про совершенные числа, а то у вас мало вероятно, что когда-нибудь выпадет совершенное.
Подремонтируйте программу, почитайте, результат напишите.
В крайнем случае поищите решение на форуме, эта задача решалась не один раз.
puporev вне форума Ответить с цитированием
Старый 26.12.2007, 17:11   #3
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Вот тут была похожая задача. http://forum.xakep.ru/m_1003726/mpage_1/tm.htm

Есть одна особенность, позволяет ОЧЕНЬ ускорить поиск
110 = 6
11100 = 28
1111000 - 120 не совершенное!
111110000 - 496
11111100000 - 2016 не совершенное!
1111111000000 - 8128
...
т.е. каждое совершенное число в двоичном виде Nединиц:N-1нулей (тока не наоборот, не каждое N1:N-1 совершенное), таким образом можно проверять не все подряд числа, а только числа вида 1nnnn0mmm <= N

и ещё http://ru.wikipedia.org/wiki/Совершенное_число
пыщь
JTG вне форума Ответить с цитированием
Старый 26.12.2007, 22:36   #4
klarissa
 
Регистрация: 22.12.2007
Сообщений: 4
По умолчанию

учитывая замечания получатся что то вроде этого:

Код:
Program lol2;   
Uses crt;   
K,n,h:integer;   
i,j:integer;   
Begin   
Clrscr   
Writeln (‘input n');   
begin  
K:=0;
For i:=2 to n do  
If i mod j=0 then k=k+1;  
If k=n then    
Writeln (‘n-soversh.') else  
Writeln (‘n-nesoversh.’);   
End;   
End.
ну даже не знаю... как то слишком просто
klarissa вне форума Ответить с цитированием
Старый 26.12.2007, 22:43   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Это действительно просто, но не настолько, как у вас. У вас ведь сначала был вложенный цикл, только в нем вместоj было написано i.
Сейчас вы его выкинули и стало совсем просто, только работать не будет.
Нужно так:

Код:
program poln_chis;
uses crt;
var i,k,j:longint;
begin
clrscr;
for i:=1 to n do
   begin
    k:=0;
    for j:=1 to i-1 do
       if i mod j=0 then
          begin
            k:=k+j;
          end;
       if k=i then write(i,' ');
     end;
  readln;
end.
P.S. Я тут скопировал у вас неправильно, нужно i:=1 to и n j:=1 to n, а то программа работать не будет.

Последний раз редактировалось puporev; 26.12.2007 в 23:15.
puporev вне форума Ответить с цитированием
Старый 27.12.2007, 07:10   #6
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

А вот древним грекам было известно только 4 совершенных числа.
А какое 5 совершенное число?
У меня компьютер долго его считает, терпения не хвотает у меня.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 27.12.2007, 07:58   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Пятое 33 550 336, шестое — 8 589 869 056.
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на Pascal... Sota Помощь студентам 3 04.05.2008 14:52
задача на записи Pascal kitty Помощь студентам 9 18.04.2008 18:14
Задача [Pascal] [Smarik] Помощь студентам 4 04.02.2008 15:50