Высоко составное число является положительным целым числом , которое имеет больше делителей , чем любое меньшее положительное целое число имеет. Это последовательность OEIS A002182 . Его первые 20 сроков
1, 2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040, 7560
Например, 4
находится в последовательности, потому что имеет 3 делителя (а именно 1, 2, 4), тогда как 3 имеет только 2 делителя, 2 также имеет 2 делителя, а 1 имеет 1 делитель.
Вызов
Если задано положительное целое число n , выведите либо n- ое очень сложное число, либо первые n очень сложное число по вашему выбору (но выбор должен быть одинаковым для каждого входа n ).
правила
Программа или функция должны теоретически работать для произвольно больших входных данных, учитывая бесконечное время и память, без учета ограничений на тип данных. По сути, это означает отсутствие жесткого кодирования конечного числа значений.
На практике программа или функция должны запускаться за разумное время, скажем, менее 1 минуты, при n до 20. Максимальный ввод или вывод может быть ограничен типом данных вашего языка (но опять-таки алгоритм должен работать теоретически). для сколь угодно больших чисел).
Разрешен любой разумный формат ввода и вывода, в том числе одинарный.
Код гольф. Побеждает несколько байтов.
источник
Ответы:
05AB1E ,
1514 байтовВход в ноль индексируется. Это означает, что
n = 0
дает1
,n = 1
дает2
и т. Д. Код:Объяснение:
Вычисляет n = 19 , что должно дать
7560
около 10 секунд.Попробуйте онлайн!
Использует кодировку CP-1252 .
источник
Желе, 15 байт
Для ввода n это печатает первые n сильно составных чисел.
Для n = 20 это займет не более двух секунд. Попробуйте онлайн!
Как это работает
Альтернативная версия, 13 байт (не конкурирует)
Хотя приведенный ниже код работал в последней версии Jelly, которая предшествовала этой проблеме, реализация
M
была очень медленной, и она не соответствовала ограничениям по времени. Это было исправлено.Попробуйте онлайн!
Как это работает
источник
RÆDL€MḢ=µƓ#
(11 байт), но на моей машине это занимает 44 минуты ...MATL ,
2624 байтаПопробуйте онлайн!
Текущее наибольшее число найденных делителей хранится в буфере обмена K. Высокосоставные числа (HCN) хранятся непосредственно в стеке. Цикл продолжает проверять кандидатов на HCN. Когда он найден, он остается в стеке, а буфер обмена K обновляется. Цикл завершается, когда найдено желаемое количество HCN.
источник
Perl
6057 + 1 = 58 байтТребуется
-n
и свободный-M5.010
|-E
:Как это работает:
источник
JavaScript (ES6) 72
Простая реализация. Время около 20 сек для входа 20
Трюк Eval может сохранить байт, удваивающий время выполнения.
Меньше гольфа
источник
Pyth,
1716 байт1 байт благодаря Якубе
Тестирование
Принимает n -индексированное n и возвращает n-е очень сложное число.
Объяснение:
источник
Рубин,
706967666462Простая реализация.
источник
C 98 байт
Попробуй это здесь .
Ungolfed
источник
Python 3, 97 байт
Полная программа, которая принимает входные данные из STDIN и печатает выходные данные в STDOUT. Это возвращает
n
1-индексированное высоко составное число.Как это работает
Это простая реализация. Ввод
n
представляет собой очень сложный числовой индекс.Программа перебирает целые числа
i
. Для каждого целого числаj
меньшеi
,i mod j
берется; если это так0
,j
должен быть коэффициент,i
и счетчикc
увеличивается, давая количество делителейi
после цикла.p
является предыдущим наибольшим числом делителей, поэтому, еслиc > p
было найдено новое очень сложное число и счетчикq
увеличивается. После тогоq = n
,i
должно бытьn
й высоко составное число, и это будет напечатано.Попробуйте это на Ideone
(Это занимает ~ 15 секунд
n = 20
, что превышает ограничение по времени для Ideone. Следовательно, приведенный пример предназначен дляn = 18
.)источник
Python 2, 207 байт
Использует тот же метод, что и ответ Денниса «Желе». Вычисляет первые 20 слагаемых в
<2
секундах.источник