Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68

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

04.07.2014, 13:46. Показов 2694. Ответов 8
Метки нет (Все метки)

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

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
#include <iostream>
#include <cmath>
using namespace std;
void swapRange(int &, int &);
int propDivisors(int);
int amicPairs(int, int);
int main()
{
        int rangeA;
        int rangeB;
        int numPairs;
        cout << "Input the start of the range: ";
        cin >> rangeA;
        cout << "Input the end of the range: ";
        cin >> rangeB;
        if (rangeA > 0 && rangeB > 0){
            if (rangeA > rangeB){
                cout << "End of range < start of range -- swapping values" << endl;
                swapRange(rangeA, rangeB);
            }
            numPairs = amicPairs(rangeA, rangeB);
            cout << "Range of numbers: " << rangeA << "-" << rangeB << endl;
            cout << "The number of Amicable Pairs is: " << numPairs << endl;
        }
    else{
            cout << "Unable to check non-positive values";
            cout << "Exiting" << endl;
    }
}
int propDivisors(int num){
        int sum = 0;
        int fac = 0;
    for (int k = 2; k < num; k++){
        if ((num % k) == 0){
                fac = k;
                sum += fac;
        }
    }
        return sum;
}
void swapRange(int &rangeA, int &rangeB){
        int x;
    if (rangeA > rangeB){
            x = rangeA;
            rangeA = rangeB;
            rangeB = x;
    }
        return;
}
int amicPairs(int A, int B){
        int i;
        int k;
        int counter;
    for (i = A; i < B; i++){
        for (k = B; k > A; k--){
            if (propDivisors(i) == k && i == propDivisors(k) && i != k){
                    cout << i << " and " << k << " are Amicable Numbers." << endl;
                    counter++;
            }
        }
    }
        return counter;
}
Видел еще один код, он короче, чем мой, но его я не понимаю совсем. Но он хотя бы работает. Сможете объяснить его?

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
#include <iostream>
 
typedef unsigned long long ull_t;
 
ull_t sum_of_divs(ull_t);
bool is_friendly(ull_t, ull_t);
 
int main()
{
    const ull_t left = 1;
    const ull_t right = 10000;
 
    for (ull_t num1 = left; num1 <= right; ++num1)
        for (ull_t num2 = num1 + 1; num2 <= right; ++num2)
            if (is_friendly(num1, num2))
                std::cout << num1 << "\t" << num2 << std::endl;
 
    return 0;
}
 
ull_t sum_of_divs(ull_t number)
{
    ull_t sum = 0;
 
    for (ull_t d = 1; d < number / 2 + 1; ++d)
        if (number % d == 0)
            sum += d;
 
    return sum;
}
 
bool is_friendly(ull_t number1, ull_t number2)
{
    return sum_of_divs(number1) == number2 && sum_of_divs(number2) == number1;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.07.2014, 13:46
Ответы с готовыми решениями:

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

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

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

8
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
04.07.2014, 14:17
Цитата Сообщение от _Лето_ Посмотреть сообщение
Нужно найти все пары дружественных чисел
Ищите. А я пойду пока узнаю что это такое.
1
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
04.07.2014, 14:48  [ТС]
Дру́жественные чи́сла — два различных натуральных числа, для которых сумма всех собственных делителей первого числа равна второму числу и наоборот, сумма всех собственных делителей второго числа равна первому числу. У меня мозг от этого плавится уже =___=
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
04.07.2014, 16:31
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Ищите. А я пойду пока узнаю что это такое.
угарЪ
0
3 / 3 / 4
Регистрация: 03.07.2014
Сообщений: 19
04.07.2014, 16:46
Попробуйте вот этот код.
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
#include <stdio.h>
#include <stdlib.h>
 
int DivSumm(int a);//Функция находит сумму делителей числа.
bool IsFriendly(int a, int b);//Функция проверяет, являются ли числа дружественными.
int main()
{
    int RangeA,RangeB;//Пределы поиска
    printf("enter left range: ");
    scanf("%d",&RangeA);//Ввод левого предела
    printf("enter right range: ");
    scanf("%d",&RangeB);//Ввод правого предела
    //Мы проверяем числа на дружественность от левого предела к правому.
    for(int num1=RangeA; num1<=RangeB; num1++)//Просматриваем все числа из интервала
    {
        for(int num2=num1; num2<=RangeB; num2++)//Просматриваем числа, которые возможно будут дружественными с num1
        {
            if(IsFriendly(num1,num2))
            {
                printf("%d,%d\n",num1,num2);
            }
        }
    }
    return 0;
}
int DivSumm(int a)
{
    int Summ = 0;
    for(int i = 1; i<=a; i++)
    {
        Summ = (a%i)?(Summ):(Summ+i);
    }
    return Summ;
}
bool IsFriendly(int a, int b)
{
    return (DivSumm(a)==DivSumm(b));
}
0
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
07.07.2014, 19:27  [ТС]
zibertscrem, этот код работает не совсем правильно. Значения, которые он должен выдавать на диапазоне от 200 до 300 - это 220 и 284, а там выходят еще много других чисел, это не считая одинаковых, типа 201, 201 и тд. Если одинаковые числа я убрал, то понять почему там еще и другие числа я не могу.

Что делает эта операция?

C++
1
Summ = (a%i)?(Summ):(Summ+i);
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
07.07.2014, 19:47
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
#include <iostream>
 
unsigned int countDividers(unsigned int x)
{
    unsigned int result = 1;
    for(int i = 2; i * i < x; ++i)
        if(x%i == 0)
        {
            result += i;
            if(x/i != i)
                result += x/i;
        }
    return result;
}
 
int main()
{
    int l, r;
    std::cout << "Enter range: ";
    std::cin >> l >> r;
 
    for(int i=l; i<=r; ++i)
    {
        unsigned int cnt = countDividers(i);
        if (countDividers(cnt) == i && i<cnt)
            std::cout << i << ' ' << cnt << std::endl;
    }
 
    return 0;
}
0
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
07.07.2014, 20:00  [ТС]
Dani, спасибо, но что делает эта операция?

C++
1
2
unsigned int cnt = countDividers(i);
       if (countDividers(cnt) == i && i<cnt)
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
07.07.2014, 20:05
cnt = countDividers(i) - считаем сумму делителей числа i, например, для 284 получится 220. Теперь countDividers(cnt) - считаем сумму делителей числа 220 - получится 284 - опять получилось число 284. Значит, эти 2 числа дружественные. i<cnt --- если бы этой операции не было, то выводилась бы одна пара 2 раза: 220 и 284; 284 и 220
А так, выводим пары, только где второе число больше первого
(быстрее нажать кнопку спасибо, чем писать)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.07.2014, 20:05
Помогаю со студенческими работами здесь

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

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

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

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

Найти все пары дружественных натуральных чисел из интервала от N 1 до N 2.
Очень нужна помощь!) Помогите пожалуйста) в С++, visual studio учусь на первом курсе мех-мата: Найти все пары дружественных...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru