|
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 89
|
||
Дружественные числа14.11.2012, 13:52. Показов 3871. Ответов 6
Метки нет (Все метки)
Требуется написать файл-функцию для решения поставленной задачи.
Два натуральных числа называются «дружественными», если каждое из них равно сумме всех делителей другого, за исключением его самого (таковы, например, числа 220 и 284). Сформировать матрицу, строками которой являтся все пары «дружественных» чисел, не превосходящих заданного натурального числа. Уважаемый Зосима предложил сделать следующее:
Предлагайте знающие как ускорить алгоритм поиска)
0
|
||
| 14.11.2012, 13:52 | |
|
Ответы с готовыми решениями:
6
Дружественные числа) Массивы... Дружественные числа, счасливые числа... и т.д.
|
|
|
||||||||||||||||
| 14.11.2012, 16:25 | ||||||||||||||||
|
Я еще чуток оптимизировал ф-цию вычисления суммы делителей:
Но я таки вспомнил правило матричного умножения!: "элемент равен сумме произведений строки на столбец" Пояснения к 4-й строке: если x - число, а k=1:x-1 - вектор, то: mod(x,k) - это тоже вектор остатков от деления x на k. mod(x,k)==0 - логический вектор, в котором на позициях, где выполняется условие будет 1, где не выполняется - 0, но это также как и k - вектор-строка, поэтому мы его транспонируем: (mod(x,k)==0)' и совершаем матричное умножение под которое и заточен матлаб. Также вместо двух строк можно записать одну: SD = (1:x-1)*(mod(x,(1:x-1))==0)'; Но методом научного тыка (дя, я написал маленькую программку) получилось, что такая конструкция считает дольше (вероятно когда интерпретатор натыкается на (1:x-1) ему приходится каждый раз создавать новую переменную, рассчитывать ее и выделять память). Но даже с такой максимально оптимизированной функцией суммы делителей вычисления не сильно ускорились Будем думать над телом функции bel. ![]() Добавлено через 1 час 33 минуты Хе, удалось рассчитать 6 пар чисел (N=11000) за 15 секунд ![]() Все что я сделал: сразу рассчитал в массив значения сумм делителей всех чисел меньших N, а затем путем перебора элементов массива находил пары по предложенному тобой выражению. Таким образом значительно уменьшилось кол-во вызовов ф-ции расчета суммы. В данном варианте она вызывается только N=11000 раз, в начале. А в предыдущем для (N=1300) ф-ция вызывалась 1688700 раз! Вот как я это узнал: Кликните здесь для просмотра всего текста
Ах да, совсем забыл выложить листинг новой файл-функции:
Единственное, над чем еще можно подумать - это более эффективное нахождение пары чисел. Вероятно можно избавиться от циклов и заменить их векторными и логическими операциями, но мне пока ничего конкретного на ум не приходит
2
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 89
|
|
| 14.11.2012, 16:33 [ТС] | |
|
Супер, работает очень быстро
Огромное спасибо!
0
|
|
|
|
|||||||||||
| 14.11.2012, 20:16 | |||||||||||
|
Не по теме: Дружественные числа? Что вы делаете? Аххах! Прекратите! :D
Я внес подфункцию sumdel в тело самй функции bel, это позволит еще уменьшить кол-во обращений к внешним ф-циям и должно увеличить быстродействие. Проверь длительность на N=11000
![]() Добавлено через 8 минут В 4й строке точка с запятой убежала - исправь пожалуйста! А то он выведет массив x=1:N и загадит весь экран)))
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 89
|
||||||
| 15.11.2012, 09:30 [ТС] | ||||||
|
По скорости на моем компе последний результат выиграл по времени 0.2 сек)
Кстати сегодня заметил и не понял что означает ' в строке
0
|
||||||
|
|
|||
| 15.11.2012, 09:39 | |||
Смекаешь?
0
|
|||
|
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 89
|
|
| 15.11.2012, 09:45 [ТС] | |
|
смекаю, но самую малость
пошерстю интернет еще
0
|
|
| 15.11.2012, 09:45 | |
|
Помогаю со студенческими работами здесь
7
Дружественные числа Дружественные числа Дружественные числа
Дружественные числа Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|