|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|
Разложение на множители19.08.2020, 09:43. Показов 19919. Ответов 31
Метки нет (Все метки)
Задача разложения числа на простые(!) множители решается многими методами и довольно быстро.
Существует ли встроенная функция или метод для волучения всех(!) вариантов получения числа произведением других натуральных чисел. Для себя сделал, но, например, для числа 720 время нахождения всех вариантов занимает ~ 0,3 сек Хотелось бы быстрее
0
|
|
| 19.08.2020, 09:43 | |
|
Ответы с готовыми решениями:
31
Разложение на множители Разложение на простые множители Разложение на простые множители |
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|||||||||||
| 19.08.2020, 12:32 [ТС] | |||||||||||
Основные "прожорливые" - 34-36 строки Добавлено через 14 минут Нашел одну "ошибку": после 51-й строчки нужно
0
|
|||||||||||
|
|
||||||
| 19.08.2020, 12:42 | ||||||
|
Чота я вообще не понял, что у вас в большом цикле while.
Но по функции delit могу посоветовать - а зачем там перебираются все потенциальные делители, через +1? Перебирайте только простые. Простые должны быть закешированы. Добавлено через 6 минут Псевдокод, как это должно быть:
0
|
||||||
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|
| 19.08.2020, 12:52 [ТС] | |
|
Вся задача звучит так:
Для заданного числа N найти наименьшее число, имеющего ровно N делителей Добавлено через 28 секунд Выложенный код - часть решения Добавлено через 1 минуту Само решение основано на: Количество делителей числа равно произведению степеней плюс 1 всех его простых множителей Добавлено через 1 минуту Число 24 Состоит из 2^3 * 3^1 Значит 24 имеет = (3+1)*(1+1) = 8 множителей
0
|
|
|
|
|||
| 19.08.2020, 12:56 | |||
|
Gdez, простых или любых?
В любом случае, разложением на простые делители тут как-то не очень пахнет. Добавлено через 2 минуты 24=2*2*2*3. Откуда тут 8? Добавлено через 48 секунд
0
|
|||
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
||||||
| 19.08.2020, 12:59 [ТС] | ||||||
|
В задаче N < 1000
Значит количество простых множителей <= 10 Отсюда в коде есть
Ответ - искомое число Добавлено через 1 минуту Нет. 4 делителя у 6 - это 1,2,3,6 А 2^4 = 16 > 6 В понятие делитель входят все числа от 1 до самого числа
0
|
||||||
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|
| 19.08.2020, 13:01 [ТС] | |
|
У 24 делители 1,2,3,4,6,8,12,24
0
|
|
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|
| 19.08.2020, 13:02 [ТС] | |
|
Еще 8-ка
0
|
|
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|
| 19.08.2020, 13:04 [ТС] | |
|
Былы идея - N разложить на простые множители и найти все варианты перемножения, при которых резултатом будет N
С помощью itertools. Но запутался)))
0
|
|
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|
| 19.08.2020, 13:10 [ТС] | |
|
В "идеальном" решении время 60 мсек
У меня 372 Добавлено через 3 минуты Перебором уже на N=16 больше 2 сек
0
|
|
|
Модератор
|
||||||
| 19.08.2020, 13:23 | ||||||
|
Может быть так?..
Оценить возможную длину массива A[] - например последующим экспериментальным прогоном в цикле от 0 до 1000. Элемент массива A[i] - это количество делителей числа i. Потом во вложенных циклах заполнил бы массив A[]
0
|
||||||
|
|
||||||
| 19.08.2020, 13:30 | ||||||
|
Составляем примерно так.
Для N=2, решение 2, список [1,2]. К этому списку можно добавить следующее наименьшее число, 3. Но тогда к нему автоматически добавится и 6. И получим решение для N=4. Таким образом заполним некоторые числа для массива ответов. Для незаполненых (3) будем искать как лучшее из предыдущиих с добавлением чего-то. И тоже будем "попадать" не в те клетки. Но постепенно все заполним. То есть, для ответа для N=3 у нас есть знание про [1,2] для N=2. По очереди добаволяем к списку : 3 - уже было, 4 - о, подходит. И так далее. Добавлено через 2 минуты Разложение на простые множители тут и правда может выскочить, для проверки после очередного добавления.
0
|
||||||
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|
| 19.08.2020, 14:07 [ТС] | |
|
N = 720
Ответ = 61261200 61261200 = 2^4 * 3^2 * 5^2 * 7^1 * 11^1 * 13^1 * 17^1 Проверка - (4+1)*(2+1)*(2+1)*(1+1)*(1+1)*(1+1)*(1+1 ) 5 * 3 * 3 * 2 * 2 * 2 * 2 = 720 Добавлено через 7 минут Например для N = 32 наилучшим будет = 4*2*2*2 Степени - 3, 1, 1, 1 2^3*3*5*7 = 840 Здесь "4" - непростой множитель Добавлено через 3 минуты ФедосеевПавел, Вылетает по времени Ну и множителей может быть от одного до десяти Цикл по двум, трем, четырем ..... ? Долго Добавлено через 3 минуты Есть идругие, например, 24 Для него -4*3*2 И решение - 360
0
|
|
|
Модератор
|
|
| 19.08.2020, 15:47 | |
|
Т.е. нужно решить уравнение
Пусть наше искомое число X раскладывается на простые множители Согласно формуле из https://ru.wikihow.com/найти-к... лого-числа число X имеет ровно N делителей, причём И теперь встаёт задача разложить N на множители (в количестве от 1 до максимума), чтобы X было минимально. Похоже, что нужно максимально длинное разложение N.
0
|
|
| 19.08.2020, 15:47 | |
|
Помогаю со студенческими работами здесь
20
Разложение на простые множители (Время: 1 сек. Память: 16 Мб Сложность: 27%) Разложение на множители Разложение на простые множители (сириус) Разложение на множители Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает
Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
|
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
На первой гифке отладочные линии отключены, а на второй включены:. . .
|