Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Naudiz
14 / 12 / 1
Регистрация: 04.11.2011
Сообщений: 137
#1

Алгоритм проверки числа на "совершенность" - C++

09.07.2013, 17:31. Просмотров 1960. Ответов 42
Метки нет (Все метки)

Приветствую всех!

Прошу помочь со следующей задачей:

"Натуральное число называется совершенным, если оно равно сумме всех своих делителей, за исключением себя самого. Число 6 – совершенное, так как 6 = 1+2+3. Число 8 – не совершенное, так как 8 ≠ 1+2+4.Дано натуральное число n. Получить все совершенные числа, меньшие n."

Задачу я решил (код ниже), но работает программа слишком медленно. Пожалуйста помогите оптимизировать код, нужно чтобы программа требовала, как можно меньше памяти и работала быстрее.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
 
bool perfect(int x)
{
   int sum=0;
   for (int i=1; i<x; i++)
      if (x%i==0) sum+=i;
   if (x==sum) return 1;
   return 0;
}
 
int main()
{
   int x;
   cin >> x;
   for (int i=1; i<=x; i++)
      if (perfect(i)) cout << i << endl;
   return 0;
}
Ссылки на литературу по сабжу приветствуются.

Заранее всем благодарен))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2013, 17:31     Алгоритм проверки числа на "совершенность"
Посмотрите здесь:
C++ Через ООП: Дать для числа наименование: "рубль", "рубля", "рублей";
Дано натуральное число. Найти сумму последних "n" цифр "n" числа, не применяя переменых значений C++
Нужно сделать так, чтобы при вводе числа, выводило "рублей" или "рубль" C++
C++ 2 Программы. На "целые числа и системы счисления" и на "метод деления отрезка пополам"
Для массива из 10 чисел проверить, есть ли в нем два одинаковых числа и напечатать "да" или "нет" C++
Проверить, образуют ли числа симметричную последовательность (варианты ответа "Yes" или "No") C++
C++ Разработать класс "Массив больших чисел", который состоит из объектов класса "Большие целые числа". Найти сумму элементов массива.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Naudiz
14 / 12 / 1
Регистрация: 04.11.2011
Сообщений: 137
12.07.2013, 21:25  [ТС]     Алгоритм проверки числа на "совершенность" #41
Thinker, опять же
C++
1
sov = ((1llu << i) - 1llu) << (i - 1llu);
Что такое "1llu"? Какое значение оно принимает?
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,277
Записей в блоге: 2
Завершенные тесты: 1
12.07.2013, 21:27     Алгоритм проверки числа на "совершенность" #42
Naudiz, оно делает приведение типа к unsigned long long.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2013, 21:30     Алгоритм проверки числа на "совершенность"
Еще ссылки по теме:
Два числа, действительное "a" и натуральное "n" вводятся с клавиатуры C++
Необработанное исключение в "0x00414558" в "467.exe": 0xC0000005: Нарушение прав доступа при чтении "0xabababbb" C++
C++ Необработанное исключение в "0x01082855" в "sort.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc"
C++ Необработанное исключение в "0x00412b4a" в "kursovik.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000004".
Даны три слова - "мама", "мыла", "раму". Задача - напечатать всевозможные варианты построения слов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.07.2013, 21:30     Алгоритм проверки числа на "совершенность" #43
Цитата Сообщение от Naudiz Посмотреть сообщение
Thinker, опять же
C++
1
sov = ((1llu << i) - 1llu) << (i - 1llu);
Что такое "1llu"? Какое значение оно принимает?
ull говорит компилятору, что мы работаем с очень большими числами, иначе компилятор их обрежет и результат будет неверным.

Добавлено через 2 минуты
Цитата Сообщение от Dani Посмотреть сообщение
с твоим кодом никто не конкурирует

Не по теме:

с этого надо было начинать

Yandex
Объявления
12.07.2013, 21:30     Алгоритм проверки числа на "совершенность"
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru