Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка числа но совершенность 
:(
    Опции темы
vx92
Дата 19.12.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 19.12.2007

Репутация: 1
Всего: 1



Код

//Проверка числа но совершенность(Совершенное число это такое число 
//сумма делитилей которго равна самому числу, например: 1+2+3=6)
#include <iostream>

using namespace std;

int main()
{
    int m = 0, sum = 0;
    cin >> m;
    for(int i = 1; i<m; i++)
    {
        if(m%i == 0)
        {
            sum += i;
        }
    }
    if(sum==m)
    {
        cout << "Da!\n";
    }
    else
    {
        cout << "Net!\n";
    }
    return 0;
}


PM MAIL   Вверх
Fin
Дата 19.12.2007, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



Можно еше улучшить алгоритм. Не имеет смысл проверять делители, которые больше, чем исходное число деленное на два. При делении, получается второй делитель. Его также можно учитывать. smile 


--------------------
Пролетал мимо.
PM MAIL   Вверх
vx92
Дата 19.12.2007, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 19.12.2007

Репутация: 1
Всего: 1



Ok! Спасибо за совет!
PM MAIL   Вверх
vx92
Дата 19.12.2007, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 19.12.2007

Репутация: 1
Всего: 1



Ты это имел ввиду:

Код

//Проверка числа но совершенность(Совершенное число это такое число 
//сумма делитилей которго равна самому числу, например: 1+2+3=6)
#include <iostream>

using namespace std;

int main()
{
    int m = 0, sum = 0, n =0;
    cin >> m;
    n = m/2;
    sum += n;
    for(int i = 1; i<n; i++)
    {
        if(m%i == 0)
        {
            sum += i;
        }
    }
    if(sum==m)
    {
        cout << "Da!\n";
    }
    else
    {
        cout << "Net!\n";
    }
    return 0;

}

PM MAIL   Вверх
Fin
Дата 20.12.2007, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



Что то типа этого:
Код

#include <iostream>
using namespace std;

bool IsIdeal(int m)
{
    int sum = 1, up =0, down=2;
    up = m/2;
    while(down<up)
    {        
        if(m%down == 0)
        {
            sum += down;
            up=m/down;
            sum += up;
        }
        down++;
    } 

    return (sum==m);
}

int main()
{
    for(int i=2; i<1000; i++)
    {
       if (IsIdeal(i)) cout << i << endl;
    }    
    return 0;
}



--------------------
Пролетал мимо.
PM MAIL   Вверх
Fin
Дата 20.12.2007, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



Вот более с оптимизированный код:
Код

#include <iostream>
using namespace std;

bool IsIdeal(int m)
{
    int sum = 1, down=2, up=m/down;;
    while (down<up)
    {   
        if(m%down == 0)
        {
            sum += down;
            sum += up;
        }
        down++;
        up=m/down;     


    } 

    return (sum==m);
}

int main()
{
    for(int i=2; i<1000000; i++)
    {
       if (IsIdeal(i)) cout << i << endl;
    }    
    return 0;
}

Поставил с засечкой времени у себя на машине
Цитата

time ./main
6
28
496
8128

real    0m25.004s
user    0m24.994s
sys     0m0.000s



Это сообщение отредактировал(а) Fin - 20.12.2007, 01:53


--------------------
Пролетал мимо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0762 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.