Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
2 / 2 / 0
Регистрация: 25.10.2018
Сообщений: 289
1

Функция находящая все пары дружественных чисел, лежащих в диапазоне от n до m

25.10.2018, 19:40. Показов 1718. Ответов 2
Метки нет (Все метки)

Даны натуральные числа n и m. Найти все пары дружественных чисел, лежащих в диапазоне от n до m. Два числа называются дружественными, если каждое из них равно сумме всех делителей другого (само число в качестве делителя не рассматривается).

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
#include "pch.h"
#include <iostream>
#include <clocale>
#include <conio.h>
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int n, m, a, b, k, sum1, sum2;
    cout << "Введите натуральные числа n и m: ";
    cin >> n >> m;
    cout << "Все пары дружественных чисел: ";
 
    for (a = n; a <= m; a++)
        for (b = n; b <= m; b++)
        {
            sum1 = 0;
            sum2 = 0;
            for (k = 1; k < a; k++)
                if (a % k == 0)
                    sum1 += k;
            for (k = 1; k < b; k++) 
                if (b % k == 0)
                    sum2 += k;
                if ((sum1 == b) && (sum2 == a))
                    cout << " " << a << " " << b;
                _getch();
                return 0;
            
        }
}

Исправьте, пожалуйста
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2018, 19:40
Ответы с готовыми решениями:

Найти все пары дружественных чисел, лежащих в диапазоне от 200 до 300
Найти все пары дружественных чисел, лежащих в диапазоне от 200 до 300.

Найти все пары дружественных чисел, лежащих в диапазоне от 200 до 300
Нужно найти все пары дружественных чисел, лежащих в диапазоне от 200 до 300 Почему-то выдает...

Найти все пары дружественных числе, лежащих в диапазоне от 200 до 300
Найти все пары дружественных числе, лежащих в диапазоне от 200 до 300. Можно полностью готовую...

Найти все пары дружественных чисел в диапазоне [n1, n2]
Два натуральных числа называются дружественными, если каждое из них равно сумме простых делителей...

2
Мозгоправ
1729 / 1023 / 468
Регистрация: 01.10.2018
Сообщений: 2,136
Записей в блоге: 2
26.10.2018, 04:42 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
#include <iostream>
#include <iomanip>
#include <clocale>
#include <conio.h>
using namespace std;
 
int divisorsSum(int n) {
    int sum = 0;
    for (int i = 1; i < n; ++i) {
        if (n % i == 0) {
            sum += i;
        }
    }
    return sum;
}
 
int main() {
    setlocale(LC_ALL, "Russian");
    int n, m, a, b, k, sum1, sum2;
    cout << "Введите натуральные числа n и m: ";
    cin >> n >> m;
    cout << "Все пары дружественных чисел:\n";
 
    for (a = n; a <= m; a++) {
        sum1 = divisorsSum(a);
        for (b = a + 1; b <= m; b++) {
            sum2 = divisorsSum(b);
            if ((sum1 == b) && (sum2 == a))
                cout << setw(12) << a << setw(12) << b << endl;
        }
    }
    return 0;
}
Добавлено через 40 минут
Но "без затей" работает достаточно медленно. От 0 до 5000 - уже становится грустно. Поэтому к процессу прикручиваем примитивный кэш. По секундомеру не засекал, но по ощущениям ускорение больше, чем на порядок.
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
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <iomanip>
#include <clocale>
#include <conio.h>
#include <memory.h>
 
using namespace std;
 
class Cache {
public:
    Cache(int first, int last) : m_first(first) {
        int size = last - first + 1;  // включая границы диапазона!
        m_data = new int[size];
        memset(m_data, -1, size * sizeof(int));
    }
    ~Cache() {
        delete[] m_data;
    }
    int& operator [] (int index) {
        return m_data[index - m_first];
    }
private:
    int m_first;
    int *m_data;
};
 
int divisorsSum(int n, Cache& cache) {
    int sum = cache[n];
    if (sum != -1)
        return sum;
 
    sum = 0;
    for (int i = 1; i < n; ++i) {
        if (n % i == 0) {
            sum += i;
        }
    }
    cache[n] = sum;
    return sum;
}
 
int main() {
    setlocale(LC_ALL, "Russian");
    int n, m, a, b, k, sum1, sum2;
    cout << "Введите натуральные числа n и m: ";
    cin >> n >> m;
    cout << "Все пары дружественных чисел:\n";
 
    Cache cache(n, m);
 
    for (a = n; a <= m; a++) {
        sum1 = divisorsSum(a, cache);
        for (b = a + 1; b <= m; b++) {
            sum2 = divisorsSum(b, cache);
            if ((sum1 == b) && (sum2 == a))
                cout << setw(12) << a << setw(12) << b << endl;
        }
    }
    return 0;
}
0
3418 / 2777 / 752
Регистрация: 25.03.2012
Сообщений: 10,099
Записей в блоге: 1
26.10.2018, 07:40 3
return 0 убрать их предпоследних {скобок}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2018, 07:40

Найти все пары дружественных чисел в диапазоне от 200 до 300
Помогите пожалуйста с решением задачи в С++. Вот условие: используя оператор цикла for, решить...

В заданном диапазоне найти все пары натуральных дружественных чисел, удовлетворяющих условию
Два натуральных числа называются дружественными, если каждое из них равно сумме всех натуральных...

Найти пары дружественных чисел в диапазоне от 200 до 300
Два натуральных числа называется дружественными, если каждое из них равно сумме всех делителей...

Функция находящая сумму целых чисел в заданном диапазоне
Помогите пожалуйста дописать, вот условие: Описать функцию SumRange(A, B) целого типа, находящую...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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