Если задано целое число ≥ 2, выведите список его делителей, отсортированных по показателям в их первичных разложениях, в порядке возрастания, упорядочив сначала по наибольшему простому, затем по второму по величине и так далее.
В качестве примера возьмем целое число 72, которое равно 2 3 3 2 . Имеет делители
1 3^0 · 2^0
2 3^0 · 2^1
3 3^1 · 2^0
4 3^0 · 2^2
6 3^1 · 2^1
8 3^0 · 2^3
9 3^2 · 2^0
12 3^1 · 2^2
18 3^2 · 2^1
24 3^1 · 2^3
36 3^2 · 2^2
72 3^2 · 2^3
При сортировке в порядке возрастания по показателям простых факторов, причем более крупные простые числа имеют приоритет, это становится
1 3^0 · 2^0
2 3^0 · 2^1
4 3^0 · 2^2
8 3^0 · 2^3
3 3^1 · 2^0
6 3^1 · 2^1
12 3^1 · 2^2
24 3^1 · 2^3
9 3^2 · 2^0
18 3^2 · 2^1
36 3^2 · 2^2
72 3^2 · 2^3
Обратите внимание, что список отсортирован сначала по порядку экспоненты 3, а затем по показателю 2. Вы также можете думать об этом как о чтении слева направо и сверху вниз по следующей сетке:
2^0 2^1 2^2 2^3
3^0 1 2 4 8
3^1 3 6 12 24
3^2 9 18 36 72
Тестовые случаи:
2 => 1 2
72 => 1 2 4 8 3 6 12 24 9 18 36 72
101 => 1 101
360 => 1 2 4 8 3 6 12 24 9 18 36 72 5 10 20 40 15 30 60 120 45 90 180 360
3780 => 1 2 4 3 6 12 9 18 36 27 54 108 5 10 20 15 30 60 45 90 180 135 270 540 7 14 28 21 42 84 63 126 252 189 378 756 35 70 140 105 210 420 315 630 1260 945 1890 3780
30030 => 1 2 3 6 5 10 15 30 7 14 21 42 35 70 105 210 11 22 33 66 55 110 165 330 77 154 231 462 385 770 1155 2310 13 26 39 78 65 130 195 390 91 182 273 546 455 910 1365 2730 143 286 429 858 715 1430 2145 4290 1001 2002 3003 6006 5005 10010 15015 30030
65536 => 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536
74088 => 1 2 4 8 3 6 12 24 9 18 36 72 27 54 108 216 7 14 28 56 21 42 84 168 63 126 252 504 189 378 756 1512 49 98 196 392 147 294 588 1176 441 882 1764 3528 1323 2646 5292 10584 343 686 1372 2744 1029 2058 4116 8232 3087 6174 12348 24696 9261 18522 37044 74088
Поскольку это код-гольф , выигрывает самый короткий код в байтах.
Желе ,
87 байтПопробуйте онлайн! Спасибо @Dennis за -1 байт.
источник
ÆDÆfU$Þ
(используя новую сортировку Jelly), сохраняет байт.Pyth, 10 байт
Попробуйте онлайн: демонстрация
К сожалению, продукт над пустым списком не определен как 1 в Pyth. Это стоит три дополнительных байта.
Объяснение:
источник
Желе ,
1210 байт2 байта благодаря @ Sp3000.
Попробуйте онлайн!
Тестирование.
Кредиты на @ Sp3000 для придания формата объяснения.
источник
Python 2, 85 байт
Нет факторизации, нет сортировки. Рекурсивная реализация одинаковой длины:
источник
На самом деле, 19 байтов
Попробуйте онлайн!
Объяснение:
источник
JavaScript, 78 байт
На основании идеи @ xnor, хотя я не понимал его код, поэтому мне пришлось переопределить его с нуля. Основной алгоритм состоит в том, что вы начинаете с [1] и умножаете на [1, ..., pᵏ] для каждого pᵏ в простой факторизации n, хотя, поскольку у меня нет простого факторизации или декартового произведения, я должен это сделать все рекурсивно. Пример:
источник
R 196 байт
Это будет чертовски неэффективно, потому что я почти не поддался искушению использовать
library(primes)
. Он создает векторd
всех основных факторов входных данных, вычисляет их частоту (число вхождений), а затем вычисляет декартово произведение всех возможных степеней (от 0 до соответствующей частотыb[i]
), к которым применяетсяprod
функция. Черт возьми, особые случаи 2 и 3! В противном случае, это хорошая демонстрация обработки R-данных и векторных функций / построчных операций (и даже чисто статистическойtable
функции!).Конечно, его эффективность может быть улучшена за счет использования 15 байт
r=2:ceiling(sqrt(n))
, если это кому-то нужно. Вот более приятная версия без гольфа:источник
Mathematica 150 байтов
источник
Brachylog , 3 байта
Попробуйте онлайн!
Код читается более или менее так же, как заголовок задачи: «факторы ввода, отсортированные по основным разложениям». Убедившись, что эта 3-байтная красота действительно прошла тестовые случаи, используя только встроенный в Brachylog смысл сортировки списков, мне пришлось скопировать и вставить все эти многие числа в REPL Clojure, где элементы списка разделяются пробелами и запятые являются пробелом, но оказалось, что это действительно работает.
источник
APL (Dyalog Extended) , 17 байт
Огромное спасибо ngn и Adám за помощь в игре в обе эти программы APL в The APL Orchard , отличном месте для изучения APL и получения помощи APL.
Попробуйте онлайн!
Ungolfing
APL (Dyalog Unicode) , 29 байтов SBCS
Попробуйте онлайн!
Ungolfing
источник
J,
3231 байтЗахватывает списки простых чисел и экспонент входного целого числа, инвертирует каждое и строит делители из этого.
использование
объяснение
источник
Рубин, 71 байт
Этот ответ основан на ответе xnor на Python 2.
Альтернатива такой же длины:
Ungolfing:
источник
Japt ,
129 байт-3 байта благодаря @Shaggy
Попробуйте онлайн!
источник
Japt, 7 байт
Запустите его онлайн
источник
Mathematica, 56 байт
источник