0 / 0 / 1
Регистрация: 16.03.2010
Сообщений: 17
|
|
1 | |
Найти дружественные числа, принадлежащие отрезку [1; 10000]20.04.2011, 10:14. Показов 28508. Ответов 25
Метки нет (Все метки)
Помогите, сегодня сдавать надо.
Дружественными числами являются два натуральных числа, таких, что каждое из них равно сумме всех натуральных делителей другого, исключая само это другое число. Например: 220 и 284 являются дружественными числами, поскольку сумма делителей числа 220 – это 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284, а сумма делителей числа 284 – это 1 + 2 + 4 + 71 + 142 = 220. Найти дружественные числа, принадлежащие отрезку [1; 10000]. Заранее благодарен.
0
|
20.04.2011, 10:14 | |
Ответы с готовыми решениями:
25
Положительные числа матрицы не принадлежащие заданному отрезку заменить на ноль Найти числа, принадлежащие отрезку [a,b], количество делителей у которых является произведением двух простых чисел Дружественные числа до 10000 Выберите числа, принадлежащие заданному отрезку (блок схема) |
5056 / 3116 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
20.04.2011, 12:23 | 2 | |||||
OverClocker, тупой перебор, но считает ооочень долго, первые две пары (а в промежутке [1; 10000] их всего пять) минуты за 4 у меня нашёл. Дальше не ждал.
0
|
║XLR8║
|
||||||||||||
20.04.2011, 15:02 | 3 | |||||||||||
Интересная тема, пытаюсь оптимизировать:
[ссылка удалена] Добавлено через 4 минуты http://www.eunnet.net/books/numbers/text/14.html
Добавлено через 35 минут
1
|
10 / 10 / 1
Регистрация: 28.11.2013
Сообщений: 153
|
|
16.03.2015, 20:30 | 5 |
outoftime, не могли бы вы (или кто-то другой) изложить алгоритм решения?
Добавлено через 8 часов 0 минут Как найти все пары дружественных чисел на промежутке [1, ... , 100 000]? Перебором -- слишком долго. Создать заранее массив дружественных чисел и потом брать из него -- не подходит.
0
|
Модератор
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,704
|
||||||
16.03.2015, 22:28 | 6 | |||||
вот не совсем перебор
создаю таблицу
для 100000000 48 секунд недостаток выводит парами например 220 284 284 220
0
|
10 / 10 / 1
Регистрация: 28.11.2013
Сообщений: 153
|
|
17.03.2015, 19:56 | 7 |
ValeryS, подправил ваш код так, чтобы тестирующая система приняла (ваш код выводит одну и ту же пару по два раза, меняя порядок элементов).
Наихудшее время: 0,004 сек! Поясните, пожалуйста, идею)
0
|
Модератор
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,704
|
||||||
17.03.2015, 20:20 | 8 | |||||
легко меняется
все дело в таблице которую я создаю 1 создаю таблицу размером в количество цифр+1 элемент(для нулевого значения) 2 обнуляю её 3 дальше заполняю суммами чтобы было понятно приведу пример на N=10 0 0 0 0 0 0 0 0 0 0 0 начиная с числа 1, внешний цикл это числа внутренний цикл это смещение в таблице и шаг поскольку делитель не равен числу то начинаем со следующего (j=i+i) добавляю к элементу таблицы число для 1 (начинаем со второго прибавляем 1)= 0 0 1 1 1 1 1 1 1 1 1 для 2 (начинаем с четвертого прибавляем 2)=0 0 1 1 3 1 3 1 3 1 3 для 3=(начинаем с шестого прибавляем 3)= 0 0 1 1 1 1 6 1 1 4 3 для 4 =(начинаем с восьмого прибавляем 4)= 0 0 1 1 3 1 6 1 7 4 3 для 4 =(начинаем с десятого прибавляем 5)= 0 0 1 1 3 1 6 1 7 4 8 таблица сумм готова далее проверка arr[i]<=N если сумма больше чем элементов массива делать нечего выходим arr[i]!=i это выбрасывает числа сумма делителей которых равно самому числу например 6 1+2+3 arr[arr[i]]==i) а вот это проверка парности смотрим например 220 и 284 arr[220]=284 arr[arr[220]]=arr[284]=220 равно i? да значит парное в исправленном варианте я добавил arr[i]=0; если число вывели как парное вычеркиваем из таблицы
4
|
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 6
|
||||||
26.08.2016, 22:20 | 9 | |||||
0
|
1 / 1 / 0
Регистрация: 20.02.2018
Сообщений: 2
|
|
20.02.2018, 19:05 | 10 |
#include <iostream>
using namespace std; int main() { setlocale(0, "rus"); cout << "Программа находит и выводит на экран пары дружественных чисел(включая совершенные) из диапазона указанного пользователем." << endl << endl; cout << "Enter the size: "; int size; cin >> size; int resul = 0; int res2 = 0; for (int i = 1; i < size; i++) { resul = 0; for(int j = 1;j < i; j++) { if(i % j == 0) { resul += j; } } res2 = 0; for(int l = 1;l < resul; l++) { if(resul % l == 0) { res2 += l; } } if(i == res2) cout << res2 << " - " << resul << endl; } cout << endl; cout << endl; return 0; }
0
|
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
|
|
20.02.2018, 20:48 | 12 |
А что там оптимизировать то.
Все простые числа меньшие 10000, являются дружественными. Все простые числа умноженные на 2 и меньшие 10000 также являются дружественными. И продолжайте эту тему до 10000. Никакой оптимизации тут не надо.
0
|
Модератор
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,704
|
|
20.02.2018, 20:54 | 13 |
например 3 и 7
как известно у простых два делителя единица и само число значит все простые дружественны 1,но 1 не дружествен никому поскольку у 1 сумма 0
0
|
ValeryS
|
20.02.2018, 21:08
#15
|
Не по теме: outoftime, так двойное зомби:) ты писал в 2011 я 2015 а сейчас 2018
0
|
║XLR8║
|
|
20.02.2018, 21:20 | 16 |
Всё верно, уже всё оптимизировано, время 0.5 это не долго
Добавлено через 53 секунды Найти дружественные числа, принадлежащие отрезку [1; 10000] смотрим код, удивляемя какой он классный и закрываем вкладку
0
|
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
|
|
20.02.2018, 21:22 | 17 |
0
|
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
|
|
20.02.2018, 22:16 | 19 |
Не по теме: Да по большому то счету так себе идейка, ну уж какая задача, такая и идея.
0
|
20 / 19 / 2
Регистрация: 19.06.2019
Сообщений: 45
|
|
18.08.2019, 20:40 | 20 |
ValeryS, спасибо большое! Все кратко и понятно. А то я долго мучался и не мог понять как решать эту задачу.
0
|
18.08.2019, 20:40 | |
18.08.2019, 20:40 | |
Помогаю со студенческими работами здесь
20
Вывести на экран все числа, принадлежащие отрезку [m, n] и кратные 7 Вывести на экран все простые числа , принадлежащие числовому отрезку от A до B Заменить на нули числа, принадлежащие заданному отрезку, и на единицы - остальные Напечатайте на экране монитора числа, принадлежащие отрезку [1; 99] и кратные числу 3 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |