Для целей этой задачи основная степень простого числа (PPP) определяется как число, которое может быть определено как простое число в степени простого числа. Например, 9 - это PPP, потому что он может быть представлен как 3 ^ 2. 81, с другой стороны, не является PPP, потому что он может быть представлен только как 3 ^ 4, а 4 не является простым. Первые несколько PPP: 4, 8, 9, 25, 27, 32, 49, 121, 125, 128, 169, 243, 289, 343 ... Это последовательность OEIS A053810
Твое задание:
Напишите программу или функцию, которая для входного целого числа n возвращает / выводит n-й PPP, либо 1-индексированный, либо 0-индексированный, в зависимости от того, что вы предпочитаете.
Входные данные:
Целое число от 0 до 1000, полученное любым разумным способом.
Выход:
ППС по индексу указанному на входе.
Тестовые случаи:
Это 1-индексированные данные, и поэтому, если ваша программа принимает 0-индексированные входные данные, необходимо получить тот же результат для указанного ввода - 1.
3 -> 9
6 -> 32
9 -> 125
Подсчет очков:
Этот код-гольф , выигрывает самая низкая оценка в байтах!
Ответы:
05AB1E (наследие) ,
97 байтСохранено 2 байта благодаря @KevinCruijssen
Попробуйте онлайн!
источник
»
вместо того,J
чтобы0\n1
не интерпретировать как правду! Но вы можете сохранить байт в унаследованной версии 05AB1E (которую вы также использовали в своем TIO), пропустив½
, поскольку это сделано неявно дляµ
(второй пункт в этой статье 05AB1E ). ТакжеʒĀ}
может быть0K
. 7 байтовШелуха , 10 байт
Попробуйте онлайн!
объяснение
источник
На самом деле , 14 байтов
Основано на решении г-на Xcoder's Pyth . Предложения по игре в гольф приветствуются. Попробуйте онлайн!
Ungolfing
источник
Mathematica, 48 байтов
Попробуйте онлайн!
но Мартин Эндер имел лучшую идею и сохранил 6 байтов
Mathematica, 42 байта
Попробуйте онлайн!
источник
Union
вместо того,Join
чтобы избежатьSort
.Outer
сохраняет еще один байтArray
:(Union@@Outer[Power,p=Prime@Range@#,p])[[#]]&
Tuples
еще короче:Sort[Power@@@Prime@Range@#~Tuples~2][[#]]&
Желе ,
121110 байт1 байт благодаря Денису.
Попробуйте онлайн!
источник
R + числа, 57 байтов
Попробуйте онлайн!
outer
такая удобная функция.Совершенно уверен, что это всегда будет работать. Приведу формальный аргумент, когда у меня будет время.
источник
Haskell ,
958580 байт-10 байт благодаря @Lynn
-5 байт благодаря @WillNess
0 на основе
Попробуйте онлайн!
объяснение
источник
f=(!!)[x|x<-[2..],or[y^e==x|y<-p x,e<-p x]]
экономит 10 байт.f=(!!)[x|x<-[2..],p<-[[i|i<-[2..x],all((>)2.gcd i)[2..i-1]]],or[y^e==x|e<-p,y<-p]]
. может нормально тогда не считатьf=
? (никогда не уверен в правилах).f=
не следует считать. Так что будет 80 байт, с(!!)[x|x<-[2..],p<-[[i|i<-[2..x],all((>)2.gcd i)[2..i-1]]],or[y^e==x|e<-p,y<-p]]
.Python 2 ,
163157137136 байтinput()
а не определения функции.Попробуйте онлайн!
источник
i=[]
и....i+=[r]*....
for
r
вместоi[p]
Pyth , 15 байт
Попробуй это здесь! или Проверьте больше тестовых случаев.
объяснение
источник
Javascript
137133 байтов** нормальный алгоритм (результат 100 мс) P = n => {
источник
APL (Dyalog Extended) , 15 байт
Попробуйте онлайн!
объяснение
источник
Perl 6 , 50 байт
Попробуйте онлайн!
Причины 24 и 7028 заключаются в том, что наибольшее значение (n = 1000) составляет 49378729, что составляет 7027 ^ 2, а наибольшее простое число 2, которое соответствует этому, равно 23. Таким образом, охватывается 2..7027 ^ 2. 23 включает в себя все предметы в первой 1000 (и много запчастей).
источник
Pyth - 13 байт
Тестовый пакет .
источник
PARI / GP, 48 байтов
Если вы не считаете
f(n)=
часть, то это 43 байта.Другой подход без установленного обозначения, который не проверяет так много ненужных случаев:
источник
Java 8, 211 байт
Очень неэффективный метод. Он в основном вычисляет все PPP от 2 2 до
999 999132 132 и сохраняет его в списке, затем сортирует этот список, а затем получаетn
'-ый элемент из этого списка.РЕДАКТИРОВАТЬ: вместо того, чтобы использовать 999 999, что приводит к списку из 28 225 элементов, я теперь использую 132 132, что приводит к списку всего 1024 элементов. Это значительно повышает производительность и является вполне приемлемым, поскольку в запросе говорится, что мы должны поддерживать входные данные с индекса от 0 до 1000. (Меняется
1e3
на132
не влияет на байт-счетчик, хотя.)Объяснение:
Попробуй это здесь.
источник
J, 21 байт
Индексируемая нулем анонимная функция.
Попробуйте онлайн!
Пытаясь вернуться в ход вещей, но я, кажется, забыл все уловки, чтобы сделать хорошие монадические цепи.
Краткое объяснение
Создает таблицу простых степеней от простого 0 до простого по индексу входных данных плюс 1 (для учета 0). Выравнивает этот список и сортирует его, а затем индексирует в него. Теперь я понимаю, что это может дать неверные результаты для некоторых значений, поскольку таблица может быть недостаточно большой - в этом случае я бы отредактировал жестко закодированное значение, такое как 1e4, которого должно быть достаточно. Я не могу доказать это тем или иным способом (это проходит для тестовых случаев, указанных), поэтому дайте мне знать, если это проблема.
Также 21 байт
источник