Вторичное число - это положительное целое число, простые множители которого (без кратности) меньше или равны его квадратному корню. 4
является вторичным числом, потому что его единственный главный фактор 2
равен его квадратному корню. Тем 15
не менее, это не вторичное число, потому что оно имеет 5
в качестве основного фактора, который больше, чем его квадратный корень ( ~ 3.9
). Поскольку все простые числа сами являются основными факторами, никакое простое число не является вторичным числом. Первые несколько вторичных чисел следующие:
1, 4, 8, 9, 12, 16, 18, 24, 25, 27, 30, 32, 36, 40, 45, 48, 49, 50, 54, 56
Третичное число определяется аналогично, за исключением того, что все простые множители должны быть меньше или равны его корню куба. Первые несколько третичных чисел следующие:
1, 8, 16, 27, 32, 36, 48, 54, 64, 72, 81, 96, 108, 125, 128, 135, 144, 150, 160, 162
В общем случае n-числовое число - это число , простые множители которого меньше или равны его n-му корню. Таким образом, положительное целое число является n
ариальным числом тогда и только тогда, когда каждый из его простых факторов удовлетворяет условию . Таким образом, все первичные числа являются положительными целыми числами (все простые множители меньше или равны самим себе), четвертичные числа имеют все свои простые множители меньше или равны их четвертому корню и т. Д.
Соревнование
С учетом числа k
и в n
качестве входных данных, выведите k
й n
-ичный номер. k
может быть либо с нулевым, либо с одним индексом (на ваш выбор) и n
всегда будет положительным.
Примеры
Это первые 20 элементов в каждой последовательности до 10-ти чисел:
Primary: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
Secondary: 1, 4, 8, 9, 12, 16, 18, 24, 25, 27, 30, 32, 36, 40, 45, 48, 49, 50, 54, 56
Tertiary: 1, 8, 16, 27, 32, 36, 48, 54, 64, 72, 81, 96, 108, 125, 128, 135, 144, 150, 160, 162
Quarternary: 1, 16, 32, 64, 81, 96, 108, 128, 144, 162, 192, 216, 243, 256, 288, 324, 384, 432, 486, 512
5-ary: 1, 32, 64, 128, 243, 256, 288, 324, 384, 432, 486, 512, 576, 648, 729, 768, 864, 972, 1024, 1152
6-ary: 1, 64, 128, 256, 512, 729, 768, 864, 972, 1024, 1152, 1296, 1458, 1536, 1728, 1944, 2048, 2187, 2304, 2592
7-ary: 1, 128, 256, 512, 1024, 2048, 2187, 2304, 2592, 2916, 3072, 3456, 3888, 4096, 4374, 4608, 5184, 5832, 6144, 6561
8-ary: 1, 256, 512, 1024, 2048, 4096, 6561, 6912, 7776, 8192, 8748, 9216, 10368, 11664, 12288, 13122, 13824, 15552, 16384, 17496
9-ary: 1, 512, 1024, 2048, 4096, 8192, 16384, 19683, 20736, 23328, 24576, 26244, 27648, 31104, 32768, 34992, 36864, 39366, 41472, 46656
10-ary: 1, 1024, 2048, 4096, 8192, 16384, 32768, 59049, 62208, 65536, 69984, 73728, 78732, 82944, 93312, 98304, 104976, 110592, 118098, 124416
ÆfṪ*³<‘
поскольку мы знаем, что если какой-либо фактор искажает, тоẠ
тот, что справа, будет.Брахилог , 21 байт
Попробуйте онлайн!
Этот ответ одноиндексный.
объяснение
источник
JavaScript (ES7),
9590 байтРазумно быстро, но, к сожалению, ограничено максимальным количеством рекурсий.
Как это работает
Вместо того, чтобы факторизовать целое число i и убедиться, что все его простые множители меньше или равны x = floor (i 1 / n ) , мы пытаемся проверить последнее предположение напрямую. Это цель внутренней функции F () :
Мы проверяем, делит ли любое целое число d в [2 ... i 1 / n ] i . Если нет, предположение неверно, и мы возвращаем 1 . Если да, мы рекурсивно повторяем процесс на i = i / d до тех пор, пока он не завершится неудачей или начальное целое число не будет полностью учтено ( i == 1 ), и в этом случае мы уменьшаем k . В свою очередь, внешняя функция f () вызывается рекурсивно, пока k == 0 .
Примечание. Из-за ошибок округления с плавающей запятой, таких как
125**(1/3) == 4.9999…
фактическое вычисленное значение для x - это пол ((i + 1) 1 / n ) .демонстрация
(Здесь с 97-байтовой версией ES6 для лучшей совместимости.)
Показать фрагмент кода
источник
JavaScript (ES7),
9379 байтЯ не мог понять ответ Арно, поэтому я написал свой собственный, и он был удобен на два байта короче. Редактировать: 14 байтов сохранено с помощью @ETHproductions. Ungolfed:
источник
++i**(1/n)
а неi**(1/n)
из-за ошибок округления с плавающей запятой, таких как125**(1/3) == 4.999...
. (То, как это написано, я думаю, что на ваш код это не влияет.)m
чтобы сбрить еще два байта.Haskell, 86 байт
Объяснение:
(
%%%%
обозначает код из строки выше)источник
filter
с лямбда редко окупается, понимание списка обычно короче:m#n=(0:1:[k|k<-[2..],last[n|n<-[2..k],all((>0).rem n)[2..n-1],k
remn<1]^n<=k])!!m
.0:
, потому что индексирование может быть на основе 0.m#n=[k|k<-[1..],last[n|n<-[1..k],all((>0).rem n)[2..n-1],k
remn<1]^n<=k]!!m
Pyth, 13 байт
Попробуйте онлайн.
Работает действительно так же, как решение Jelly.
источник
Perl 6, 88 байт
Я случайно понял, что вам не нужно смотреть на каждый фактор
n
, только на самый большой, которыйf
вычисляет внутренняя функция . К сожалению, это уносит стек с большими входами.Надежность можно улучшить, добавив тест на простоту, используя встроенный
is-prime
метод Ints, за счет еще нескольких символов.источник
Шелуха , 10 байт
Попробуйте онлайн!
объяснение
Мне потребовалось некоторое время, чтобы выяснить, использует
→
ли возврат1
из пустого списка вместо того,-Inf
для▲
чего он уходит1
в список (в противном случае это будет стоить 2 байта, чтобы добавить его снова):источник
R, 93 байта
Zero-индексироваться.
Это рекурсивная функция, которая продолжает работать до тех пор, пока не найдет следующий номер в строке. Использует
numbers
упаковку, чтобы найти основные факторы.источник
MATL, 21 байт
В этом решении используется индексация по одному, а входы -
n
иk
соответственно.Попробуйте онлайн!
объяснение
источник
~
для повторного использования второго ввода :-)Brachylog v2 , 16 байт
Попробуйте онлайн!
Благодарим Денниса за решение Jelly, которое заставило меня задуматься в правильном направлении.
объяснение
Вот версия, немного отличная от других, которую легче разобрать:
Предикат помощника (строка 2): вход - показатель степени n , выход - без ограничений:
Основной предикат (строка 1): вход - это список, содержащий индекс k (на основе 1) и показатель степени n ; вывод неограничен:
источник
APL (NARS), 53 символа, 106 байтов
тест:
источник
Python 2 , 114 байт
Попробуйте онлайн!
1-индексированная функция.
источник
Japt , 14 байт
Принимает
n
в качестве первого ввода иk
(1-индексированный) в качестве второго.Попытайся
источник