Это супер-премьер?


22

Задний план

Супер-премьер - простое число, индекс в списке всех простых чисел также простой. Последовательность выглядит так:

3, 5, 11, 17, 31, 41, 59, 67, 83, 109, 127, 157, 179, 191, ...

Это последовательность A006450 в OEIS .

Вызов

Учитывая положительное целое число, определите, является ли оно суперпростым.

Тестовые случаи

2: ложь
3: правда
4: ложь
5: правда
7: ложь
11: правда
13: ложно
17: правда
709: правда
851: неверно
991: правда

счет

Это , поэтому выигрывает самый короткий ответ на каждом языке.


6
Что такое индекс 2 ? Это 1 или 0 ?
Деннис

1
@Dennis последовательность 1-индексирована; индекс 2 равен 1.
musicman523

2
Первая мысль после прочтения, что такое суперпрайм: что бы вы назвали супер-супер-простым числом? Или супер ^ 3-простые? Что больше: число атомов во вселенной или 11-е супер ^ 11-простое число? Вы, дорогой интернет-пользователь, крадете еще несколько часов моего лучшего времени!
J_F_B_M

@J_F_B_M Примите вызов на его основе! : D
musicman523

1
@J_F_B_M 11 - это супер-премьер, индекс которого в списке супер-простых чисел также является супер-простым (3), поэтому 11-й супер-премьер является супер-супер-супер-простым
Skidsdev

Ответы:


21

Желе , 5 байт

ÆRÆNċ

Попробуйте онлайн!

Как это работает

ÆRÆNċ  Main link. Argument: n

ÆR     Prime range; yield the array of all primes up to n.
  ÆN   N-th prime; for each p in the result, yield the p-th prime.
    ċ  Count the occurrences of n.

8
Черт возьми, ты снова выиграл ...
ETHproductions

3
Он всегда делает ...
Грифон - Восстановить Монику

@ETHproductions Ну, решение довольно очевидно ... это просто ниндзя здесь.
Эрик Outgolfer

14

Mathematica, 26 23 байта

Спасибо пользователю 202729 за сохранение 3 байта.

PrimeQ/@(#&&PrimePi@#)&

Это использует тот факт, что Mathematica оставляет большинство бессмысленных выражений без оценки (в данном случае логическое Andиз двух чисел) и Mapможет применяться к любому выражению, а не только к спискам. Таким образом, мы вычисляем Andвходное значение и его первичный индекс, который просто остается таким, и затем мы Mapпроверяем первичность над этим выражением, которое превращает два операнда Andв логические значения, так что Andзатем можно вычислить.


1
23 байт: PrimeQ/@(#&&PrimePi@#)&.
user202729

@ user202729 Хорошо, спасибо. :)
Мартин Эндер

10

Желе , 6 байт

ÆRi³ÆP

Попробуйте онлайн!

Использует ту же технику, что и мой ответ Япта: сгенерируйте простые числа до n , получите индекс n в этом списке и проверьте его на простоту. Если n само не является простым, индекс равен 0 , что также не является простым, поэтому 0 все равно возвращается.


9

Japt , 13 11 байт

õ fj bU Ä j

Проверьте это онлайн!

объяснение

Это на самом деле очень просто, в отличие от моего первоначального представления:

 õ fj bU Ä  j    
Uõ fj bU +1 j    Ungolfed
                 Implicit: U = input integer
Uõ               Generate the range [1..U].
   fj            Take only the items that are prime.
      bU         Take the (0-indexed) index of U in this list (-1 if it doesn't exist).
         +1 j    Add 1 and check for primality.
                 This is true iff U is at a prime index in the infinite list of primes.
                 Implicit: output result of last expression

4

Python 3 , 104 97 93 байта

p=lambda m:(m>1)*all(m%x for x in range(2,m))
f=lambda n:p(n)*p(len([*filter(p,range(n+1))]))

Возвращает 0/ 1, максимум на 4 байта длиннее, если это должно быть True/ False.

Попробуйте онлайн!


1
0/1 это хорошо. Хороший ответ! Поскольку вы никогда не используете значение f, вы можете переформатировать свой код следующим образом и исключить его из числа байтов.
musicman523

@ musicman523 Спасибо за совет!
С МакЭвой

3

Желе , 7 байт

ÆCÆPaÆP

Попробуйте онлайн!

ÆCподсчитывает количество простых чисел, меньших или равных входному значению (поэтому, если входное значение равно n- му простому, возвращается n ). Затем ÆPпроверяет этот индекс на простоту. Наконец, aвыполняется логическое И между этим результатом и ÆP(проверкой первичности) исходного ввода.



2

05AB1E , 6 байтов

ÝØ<Øså

Попробуйте онлайн!

объяснение

ÝØ<Øså
Ý      # Push range from 0 to input
 Ø     # Push nth prime number (vectorized over the array)
  <    # Decrement each element by one (vectorized)
   Ø   # Push nth prime number again
    s  # swap top items of stack (gets input)
     å # Is the input in the list?




1

QBIC , 33 байта

~µ:||\_x0]{p=p-µq|~q=a|_xµp]q=q+1

объяснение

~   |   IF   ....  THEN (do nothing)
  :         the number 'a' (read from cmd line) 
 µ |        is Prime
\_x0        ELSE (non-primes) quit, printing 0
]           END IF
{           DO
            In this next bit, q is raised by 1 every loop, and tested for primality. 
            p keeps track of how may primes we've seen (but does so negatively)
    µq|     test q for primality (-1 if so, 0 if not)
p=p-        and subtract that result from p (at the start of QBIC: q = 1, p = 0)
~q=a|       IF q == a
_xµp        QUIT, and print the prime-test over p (note that -3 is as prime as 3 is)
]           END IF
q=q+1       Reaise q and run again.


1

Haskell, 121 байт

f=filter
p x=2==(length$f(\a->mod(x)a==0)[1..x])
s=map(\(_,x)->x)$f(\(x,_)->p x)$zip[1..]$f(p)[2..]
r x=x`elem`(take x s)

1
(\(_,x)->x)есть snd, (\(x,_)->p x)есть (p.fst). Оба fstи sndнаходятся в Прелюдии, поэтому нет необходимости в импорте.
Лайкони

Не используйте кавычку слишком часто : r x=elem x$take x s. Однако, в этом случае вы можете пойти pointfree (снова вводя кавычку) и опустить имя функции: elem<*>(`take`s).
Ними



1

Matlab, 36 34 байта

Сохранено 2 байта благодаря Тому Карпентеру.

Очень наивная реализация с использованием встроенных функций:

isprime(x)&isprime(nzz(primes(x)))

1
Только для Octave вы можете также сохранить еще один байт(p=@isprime)(x)&p(nnz(primes(x)))
Том Карпентер,

1

Python 2 , 89 байт

def a(n):
 r=[2];x=2
 while x<n:x+=1;r+=[x]*all(x%i for i in r)
 return{n,len(r)}<=set(r)

Попробуйте онлайн!

Конструкции r, список простых чисел <= n; если n - простое число, то nэто n len(r)-е простое число. Таким образом, n - супер простое число тогда и только тогда, когда n в r и len (r) в r.



0

Юлия 0.6, 61 байт

верните 1, если x суперстандарт, 0 в противном случае.

без использования функции простого типа.

x->a=[0,1];for i=3:x push!(a,0i%(2:i-1))end;a[sum(a)]&a[x]
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.