1 / 1 / 1
Регистрация: 26.02.2018
Сообщений: 155
1

Требуется найти число в интервале [l;r] с максимальной суммой его натуральных делителей

27.02.2018, 02:15. Показов 10346. Ответов 10
Метки нет (Все метки)

Требуется найти число в интервале [l;r] с максимальной суммой его натуральных делителей.
На вход программе даются два натуральных числа l и r (l≤r≤500), разделенные пробелом, — левая и правая граница интервала.
Требуется вывести одно натуральное число — ответ на задачу.

вводные данные:
50 100
выводные данные:
96

Буду признателен вам за помощь!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2018, 02:15
Ответы с готовыми решениями:

Найти число с максимальной суммой делителей
Дано число N. Найти число из диапазона от 1 до N с максимальной суммой делителей (включая непростые...

Найти число с максимальной суммой делителей
Хелп плиз :) Нужна прога, которая находит натуральное число от 1 до 10000 с максимальной суммой...

Найти натуральное число от 1 до 10000 с максимальной суммой делителей.
Не понимаю как решить))

Дано натуральное n. Найти число меньшее n с максимальной суммой делителей
Нужно переписать программу с языка PureBasic на язык С++ Вот сама задача: Дано натуральное n....

10
570 / 352 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
27.02.2018, 07:52 2
Лучший ответ Сообщение было отмечено Kalighost как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
int main() {
    int l, r, maxSum(0), sum(0), num(0);
    cin >> l >> r;
 
    for (; l < r; l++) {
        for (int i(1); i < l; i++) {
            if (l % i == 0) sum += i;
        }
        if (sum > maxSum) {
            maxSum = sum;
            num = l;
        }
        sum = 0;
    }
    if (num) cout << num << endl;
 
    return 0;
}
0
Модератор
Эксперт по электронике
8695 / 6493 / 879
Регистрация: 14.02.2011
Сообщений: 22,713
27.02.2018, 08:01 3
Цитата Сообщение от Avaddon74 Посмотреть сообщение
i < l
само l считать или нет? вроде как тоже является делителем
тогда i <=l
0
570 / 352 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
27.02.2018, 08:06 4
Лучший ответ Сообщение было отмечено Kalighost как решение

Решение

Прошу прощения, упустил из виду:
Цитата Сообщение от Kalighost Посмотреть сообщение
l≤r≤500
тогда вот здесь for (; l < r; l++) нужно исправить на for (; l <= r; l++)

Добавлено через 3 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
само l считать или нет? вроде как тоже является делителем
По законам математики, если к сумме прибавлять само себе ещё раз, то это не повлияет на результат.
Допустим макс делителей у 10 но есть ещё и 8, если прибавлять к 10 + 10 = 20 и 8 + 8 = 16, десятка всё равно будет впереди

Добавлено через 55 секунд
Наверно запутанно объяснил
0
Модератор
Эксперт по электронике
8695 / 6493 / 879
Регистрация: 14.02.2011
Сообщений: 22,713
27.02.2018, 08:10 5
Цитата Сообщение от Avaddon74 Посмотреть сообщение
По законам математики, если к сумме прибавлять само себе ещё раз, то это не повлияет на результат.
так тут то не само себя
например возьмем простые числа 2 3 5 7, если не брать делителям самого себя то сумма 1 1 1 1, а если брать то 3 4 6 8
0
570 / 352 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
27.02.2018, 09:01 6
ValeryS, ну вот число 8, делители 2 и 4 в сумме 6 и число 9 делители 3 если мы к 6 прибавим 8 получим 14, а к 3 прибавим 9 получим 12, все равно больше. если числа четные, то у них большая часть делителей одинаковые и мне кажется что всегда сумма делителей будет у четных больше

Добавлено через 45 минут
ValeryS, хотя я немного не прав, у 2 и 3 разница есть, но наверно это исключения
Надо подумать над математическим доказательством
0
1 / 1 / 1
Регистрация: 26.02.2018
Сообщений: 155
27.02.2018, 09:24  [ТС] 7
Спасибо большое за помощь! Прога работает, единственное она не выводит ответ, если l и r равны. Я всунул ЖЕСТКИЙ костыль, за который самому стыдно)) Вот код, если кому-то понадобится!
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
#include "iostream"
#include "iomanip"
#include "cmath"
using namespace std;
 
int main() {
    int l = 0, r = 0, msum = 0, sum = 0, num = 0;
    cin >> l >> r;
 
    if (l != r){
    for (; l < r; l++) {
        for (int i = 1; i < l; i++) {
            if (l % i == 0) sum += i;
        }
        if (sum > msum) {
            msum = sum;
            num = l;
        }
        sum = 0;
    }
    if (num) cout << num << endl;
}
    else
        cout << l;
    return 0;
}
0
Модератор
Эксперт по электронике
8695 / 6493 / 879
Регистрация: 14.02.2011
Сообщений: 22,713
27.02.2018, 09:48 8
Avaddon74, 18 и 41
без самого числа
18 1+2+3+6+9=21
41 1
итого 21>1 следовательно 18 максимальное
с самим числом
18 1+2+3+6+9+18=39
41 1+41 =42
здесь уже 41

Добавлено через 2 минуты
Цитата Сообщение от Kalighost Посмотреть сообщение
она не выводит ответ, если l и r равны.
Цитата Сообщение от Kalighost Посмотреть сообщение
for (; l < r; l++)
сделай вот так
C++
1
for (; l < =r; l++)
и будет тебе щастье
Цитата Сообщение от Kalighost Посмотреть сообщение
Я всунул ЖЕСТКИЙ костыль
это вот этот
Цитата Сообщение от Kalighost Посмотреть сообщение
if (l != r)
выбрось
0
570 / 352 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
27.02.2018, 11:35 9
Цитата Сообщение от ValeryS Посмотреть сообщение
Avaddon74, 18 и 41
без самого числа
18 1+2+3+6+9=21
41 1
итого 21>1 следовательно 18 максимальное
с самим числом
18 1+2+3+6+9+18=39
41 1+41 =42
здесь уже 41
Да, но ведь он проверит ещё и 40, а значит 40 будет больше, мы же говорим о последовательности чисел

Добавлено через 2 минуты
так то можно любое маленькое положительное взять и любое большое простое и получится тот же результат, но у нас изначально вопрос стоял: повлияет ли прибавление самого числа на результат, если перебирать соседние числа, а вот с соседними на результат не повлияет
1
Модератор
Эксперт по электронике
8695 / 6493 / 879
Регистрация: 14.02.2011
Сообщений: 22,713
27.02.2018, 11:38 10
Цитата Сообщение от Avaddon74 Посмотреть сообщение
так то можно любое маленькое положительное взять и любое большое простое и получится тот же результат,
ну и ладно
0
570 / 352 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
27.02.2018, 12:17 11
ValeryS, Кстати, нашел нечетное число, у которого сумма делителей больше чем у соседнего четного это:
999998 - сумма делителей 1560672 (включая само число)
999999 - сумма делителей 2042880 (включая само число)
короче, числа типа 9...98 меньше чем 9..99
Я просто до этого считал, что любое четное будет иметь большую сумму делителей чем соседние нечетные, а оно эвоно как
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2018, 12:17
Помогаю со студенческими работами здесь

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

Найти натуральное число из заданного диапозона с максимальной суммой делителей
Найти натуральное число, лежащее в диапозоне от 1 до 10000 с максимальной суммой делителей. Почему...

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

Определить число с максимальной суммой делителей
Помогите составить программу. Вот условие: На отрезке определить число с максимальной суммой...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru