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

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

Войти
Регистрация
Восстановить пароль
 
qwer1234
13 / 13 / 3
Регистрация: 30.10.2012
Сообщений: 463
#1

Дружеские числа - C++

10.11.2013, 16:08. Просмотров 417. Ответов 3
Метки нет (Все метки)

Два натуральных числа называют дружескими, если каждое с них будет равно сумме всех делителей другого, кроме этого самого числа. Найти все пары дружеских чисел, что находятся в диапазоне от 200 до 300
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2013, 16:08     Дружеские числа
Посмотрите здесь:

C++ Проверить, являются ли данные числа С и D соответственно квадратом и кубом числа А
C++ Составить функцию которая добавляет в начало числа, увеличивая порядок числа на 1.
C++ Дружеские функции и перегрузка операторов
Распечатать все числа от 1 до N, у которых остатки от деления на число Z не превышают числа M. C++
Рандомное заполнение матрицы, причем от числа до числа, введенного с клавиатуры C++
C++ Дано натуральные числа n и m. Определить суму m последних цифр числа n.
C++ Создать функцию которая выводит на экран, числа от 1 до указанного числа
C++ Корни квадратного уравнения, кратность случайного числа, процент от числа
С помощью рекурсии вывести все числа от 1 до введенного пользователем числа k C++
Заменить нулями те числа последовательности, величина которых по модулю больше максимального числа C++
Данные числа end являются соответственно квадратом и кубом числа а C++
Пропадают некоторые числа при увеличении числа в бесконечном цикле C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Anton_Kretov
 Аватар для Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
10.11.2013, 18:09     Дружеские числа #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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
 
using namespace std;
 
/*
Два натуральных числа называют дружескими, если каждое с них будет равно сумме всех делителей другого, кроме этого самого числа.
Найти все пары дружеских чисел, что находятся в диапазоне от 200 до 300
*/
 
bool isFriend(int dividers1[], int firstNumber, int numOfDividers1, int dividers2[], int secondNumber, int numOfDividers2);
 
int main()
{
    int firstNumber, secondNumber;
    //cout << "\n" << "Enter first number: ";
   // cin >> firstNumber;
   // cout << "\n" << "Enter second number: ";
    //cin >> secondNumber;
    int numOfDividers1;
    int dividers1[100];
    int numOfDividers2;
    int dividers2[100];
    int j;
    int remFirst = 0, remSecond = 0;
 
    firstNumber = 200; secondNumber = 200;
do{
    if(secondNumber > 299) {
        firstNumber++;
        secondNumber = 200;
    }
 
    secondNumber++;
 
    cout << "\n\t\t" << "FIRST NUMBER: " << firstNumber << " AND SECOND NUMBER: " << secondNumber;
 
    numOfDividers1 = 0;
    numOfDividers2 = 0;
    j = 0;
 
    for(register int i = 1; i < firstNumber; i++) {
        if(firstNumber % i == 0) {
            numOfDividers1++;
            dividers1[j] = i;
            j++;
        }
    }
 
    for(register int i = 0; i < j; i++) {
       // cout << "\n" << "Divider of first: " << dividers1[i];
    }
 
 
    j = 0;
 
    for(register int i = 1; i < secondNumber; i++) {
        if(secondNumber % i == 0) {
            numOfDividers2++;
            dividers2[j] = i;
            j++;
        }
    }
 
 
    for(register int i = 0; i < j; i++) {
      //  cout << "\n" << "Divider of second: " << dividers2[i];
    }
 
    bool isAFriend = isFriend(dividers1, firstNumber, numOfDividers1, dividers2, secondNumber, numOfDividers2);
    if(isAFriend) {
        cout << "\n" << "Numbers " << firstNumber << " and " << secondNumber << " are friends!";
        remFirst = firstNumber;
        remSecond = secondNumber;
    } else
        cout << "\n" << "Numbers " << firstNumber << " and " << secondNumber << " are not friends!";
 
} while((firstNumber <= 300) && (secondNumber <= 300));
 
    cout << "\n" << "Friends were: " << remFirst << " and " << remSecond;
    return 0;
}
 
bool isFriend(int dividers1[], int firstNumber, int numOfDividers1, int dividers2[], int secondNumber, int numOfDividers2) {
    int sumOfFirst, sumOfSecond;
    sumOfFirst = sumOfSecond = 0;
 
    for(register int i = 0; i < numOfDividers1; i++) {
        sumOfFirst += dividers1[i];
    }
   // cout << "\n" << "SumOfFirst is: " << sumOfFirst;
 
    for(register int i = 0; i < numOfDividers2; i++) {
        sumOfSecond += dividers2[i];
    }
   // cout << "\n" << "SumOfSecond is: " << sumOfSecond;
 
    return (firstNumber == sumOfSecond) && (secondNumber == sumOfFirst);
 
}
qwer1234
13 / 13 / 3
Регистрация: 30.10.2012
Сообщений: 463
10.11.2013, 19:24  [ТС]     Дружеские числа #3
Большое спасибо. Пока попытаюсь сам разобраться, и если будут вопросы - отпишу вам
Anton_Kretov
 Аватар для Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
10.11.2013, 19:30     Дружеские числа #4
qwer1234, хорошо, тогда отпишите.
Yandex
Объявления
10.11.2013, 19:30     Дружеские числа
Ответ Создать тему
Опции темы

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