Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разбор кода https://www.cyberforum.ru/ cpp-beginners/ thread426085.html
Здравствуйте! Подскажите, пожалуйста, что обозначает вот это Utf8_16::utf8 Utf8_16::k_Boms зачем тут нужны двоеточия :) const Utf8_16::utf8 Utf8_16::k_Boms = { {0x00, 0x00, 0x00}, // Unknown...
C++ Передать в массив I(5) вторую половину массива J(10).
помогите:Передать в массив I(5) вторую половину массива J(10).
Умножение матриц C++
помогите сделать задачу: Даны матрицы: А размером m*k и В размером k*n.Получить матрицуС=A*В. Создавайте темы с осмысленными и понятными названиями - это серьезно повышает шансы, что на ваш вопрос...
C++ Не могу вывести вектор Добрый день. Подскажите пожалуйста в чем дело. Есть массив класса. Пихаю его в вектор. Не ругается. Пытаюсь вывести - ошибка "error C2679: бинарный "<<": не найден оператор, принимающий правый... https://www.cyberforum.ru/ cpp-beginners/ thread426059.html
C++ Найти наименьший элемент односвязного линейного списка https://www.cyberforum.ru/ cpp-beginners/ thread426055.html
Найти наименьший элемент односвязного линейного списка. Сценарий: обходя список найти минимальное значение поля Data. Прошу помогите, ума не приложу как такое сделать.
C++ При вводе в строку цифр буквы выдается сообщение «Это не цифра».как?
Помогите написать программу для выполнения следующих действий. При вводе в строку цифр буквы выдается сообщение «Это не цифра».
C++ Мнение. Что лучше Структуры или Классы?
Ребят, вопрос такой у меня возник. При решении одной и той же задачи я использовала Структуры и классы, но вот что из них лучше и почему-так и не поняла:-[ Что из этого лучше использовать и почему?
C++ С++, операторы do while, Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора Здравствуйте, буду очень благодарен, если кто поможет Вычисление функции с помощью разложения в ряд Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора,... https://www.cyberforum.ru/ cpp-beginners/ thread426021.html
C++ Рекурсия, разложение на слогаемые https://www.cyberforum.ru/ cpp-beginners/ thread426009.html
Нужно подсчитать количество возможных разложение числа на сумму слагаемых количеством больше двух. Мы водим число и получаем количество представлений. p(1) = 1 p(2) = 2 p(3) = 3 p(4) = 5 p(5) =...
C++ Линейный двусвязный список Задали задачу, реализовать линейный двусвязный список, и функцию к нему - удаление узла. Читал литературу, правда в спешке, искал по форуму и просто голова кругом: узел это просто число, или это... https://www.cyberforum.ru/ cpp-beginners/ thread426008.html
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
26.04.2013, 14:30 0

Является ли натуральное число совершенным. С++.

26.04.2013, 14:30. Просмотров 6679. Ответов 5
Метки (Все метки)

Ответ

yuraiow, а есть ли в этом смысл? Я такового не вижу. Главным аргументом против использования классов выступает то, что сложно придумать, какое у этого класса должно быть состояние, по сути данный алгоритм обладает только поведением. Но если подобным вопросом не задаваться - я вижу несколько возможных решений:
1. В составе класса IntegerUtils, который наряду с другими алгоритмами (например, проверки числа на простоту) содержит и этот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class IntegerUtils
{
public:
    // Другие методы
    
    static bool is_perfect(int num)
    {
        int sum = 0;
        
        for (int d = num / 2; d >= 1; --d)
            if (num % d == 0)
                sum += d;
        
        return sum == num;
    }
    
    // Другие методы
};
2. Класс, состояние которого - число, для которого определяем совершенность, и который кэширует результат, чтобы избежать повторного вычисления, если только само число не изменилось извне:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class CachedPerfectnessChecker
{
public:
    CachedPerfectnessChecker(int number):
        m_number(number),
        m_value_changed(true),
        m_cache(false)
    {
    }
    
    int get_number() const
    {
        return m_number;
    }
    
    void set_number(int number)
    {
        if (get_number() != number)
        {
            m_number        = number;
            m_value_changed = true;
        }
    }
    
    bool is_perfect()
    {
        if (m_value_changed)
        {
            int sum = 0;
            int num = get_number();
            
            for (int d = num / 2; d >= 1; --d)
                if (num % d == 0)
                    sum += d;
            
            m_value_changed = false;
            m_cache         = (sum == num);
        }
        
        return m_cache;
    }
    
private:
    int m_number;
    
    bool m_value_changed;
    bool m_cache;
};
3. Ну и в качестве бонуса - вычисление на стадии компиляции (хотя это only for lulz, ибо последнее число, на котором компилятор согласился развернуть шаблон - 1797, а до этого числа совершенных чисел всего 3):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template<int N, int D>
struct IsPerfectHelper
{
    static const int result = IsPerfectHelper<N, D - 1>::result + ((N % D == 0) ? D : 0);
};
 
template<int N>
struct IsPerfectHelper<N, 0>
{
    static const int result = 0;
};
 
template<int N>
struct IsPerfect
{
    static const bool result = (N == IsPerfectHelper<N, N / 2>::result);
};


Вернуться к обсуждению:
Является ли натуральное число совершенным. С++.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2013, 14:30
Готовые ответы и решения:

Определить, является ли заданное натуральное число совершенным
Помогите пожалуйста с задачей Вот условие: Определить, является ли заданное натуральное число...

Определить является ли заданное натуральное число совершенным
1) Составьте программу проверяющую,является ли заданное натуральное число совершенным, т. е. равным...

Проверить, является ли заданное натуральное число совершенным
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main(); { setlocale...

Проверить, является ли заданное натуральное число совершенным
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main(); { setlocale...

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