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

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

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

Вывести в порядке убывания все целые числа, расположенные между A и B C++
Дан файл F, компонентами которого являются целые числа. Получить в файле G все нечетные числа, входящие в файл F. Числа в файле G должны следовать C++
C++ От данного числа N вычтем сумму цифр этого числа, от полученного числа опять вычтем сумму цифр и т.д. до тех пор, пока число положительно
C++ Как написать программу-калькулятор чтобы было можно додавать 2 числа, 3 числа, 4 числа, n чисел?
Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми 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
12 / 12 / 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     Дружеские числа
Ответ Создать тему
Опции темы

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