Я пытаюсь решить алгоритмическую задачу, которая требует от меня сортировки списка чисел размера N (N ‹ = 1e6) на основе лексикографического порядка их простых множителей. Каждое число в списке находится в [2,1e6].
Ссылка на проблему.
Например,
2 3 4 5 6
будет отсортирован по:
2 4 6 3 5
Их основные факторы показаны ниже:
2 = 2
3 = 3
4 = 2 * 2
5 = 5
6 = 2 * 3
Моя попытка:
Я могу найти правильное решение для этого, используя метод простой факторизации O (logn) для каждого из чисел и сохраняя его в массиве 1e6 * 21 2d, потому что все числа ‹ = 1e6 могут иметь не более 20 простых делителей, поскольку 2 ^ 20> 1e6.
После этого я сортирую каждое из чисел, используя лексографический порядок этих простых множителей.
Моя программа может работать хорошо при ограничении времени в 2 секунды, но использует слишком много памяти (ограничение памяти составляет 32 МБ).
Может ли кто-нибудь посоветовать мне лучший способ решить эту проблему?
p.s. Эта проблема была помечена как «поиск в глубину», но я все равно не понимаю, как это будет работать.