¿Es un superprime?

22

Fondo

Un superprimo es un número primo cuyo índice en la lista de todos los primos también es primo. La secuencia se ve así:

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

Esta es la secuencia A006450 en el OEIS .

Reto

Dado un número entero positivo, determine si es un superprime.

Casos de prueba

2: falso
3: cierto
4: falso
5: cierto
7: falso
11: cierto
13: falso
17: cierto
709: verdadero
851: falso
991: verdadero

Tanteo

Este es el , por lo que gana la respuesta más corta en cada idioma.

musicman523
fuente
66
¿Cuál es el índice de 2 ? ¿Es 1 o 0 ?
Dennis
1
@Dennis la secuencia está indexada en 1; el índice de 2 es 1.
musicman523
2
Primero pensé después de leer qué es un super-primo: ¿cómo llamarías a super-super-primos? O super ^ 3-primos? ¿Qué es más grande, el número de átomos en el universo o el undécimo super ^ 11-primo? ¡Tú, querida persona de internet, estás robando otras horas de mis horas de mi mejor momento!
J_F_B_M
@J_F_B_M ¡Haz un desafío basado en él! : D
musicman523
1
@J_F_B_M 11 es un super-prime cuyo índice en la lista de super-prime también es un super-prime (3), por lo que el 11 ° super-prime es un super-super-super-prime
Skidsdev

Respuestas:

21

Jalea , 5 bytes

ÆRÆNċ

Pruébalo en línea!

Cómo funciona

Æ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.
Dennis
fuente
8
Dios mío, ganas de nuevo ...
ETHproductions
3
Siempre lo hace ...
Gryphon - Restablece a Mónica el
@ETHproductions Bueno, la solución es bastante obvia ... es solo el ninja aquí.
Erik the Outgolfer
14

Mathematica, 26 23 bytes

Gracias a user202729 por guardar 3 bytes.

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

Esto hace uso del hecho de que Mathematica deja la mayoría de las expresiones sin sentido sin evaluar (en este caso, la lógica Andde dos números) y Mappuede aplicarse a cualquier expresión, no solo a listas. Por lo tanto, calculamos la Andentrada y su índice primo, que permanece así, y luego realizamos Mapla prueba de primalidad sobre esta expresión que convierte los dos operandos del Anden booleanos, de modo que Andluego puedan evaluarse.

Martin Ender
fuente
1
23 bytes: PrimeQ/@(#&&PrimePi@#)&.
user202729
@ user202729 Bien, gracias. :)
Martin Ender
10

Jalea , 6 bytes

ÆRi³ÆP

Pruébalo en línea!

Utiliza la misma técnica que mi respuesta de Japt: Genere los números primos hasta n , obtenga el índice de n en esa lista y verifique la primalidad. Si n no es primo, el índice es 0 , que tampoco es primo, por lo que 0 se devuelve de todos modos.

ETHproducciones
fuente
9

Japt , 13 11 bytes

õ fj bU Ä j

¡Pruébalo en línea!

Explicación

Esto es realmente muy sencillo, a diferencia de mi presentación original:

 õ 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
ETHproducciones
fuente
4

Python 3 , 104 97 93 bytes

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))]))

Devuelve 0/ 1, como máximo 4 bytes más si tiene que ser True/ False.

Pruébalo en línea!

C McAvoy
fuente
1
0/1 está bien. ¡Buena respuesta! Como nunca usa el valor de f, puede reformatear su código de esta manera y excluirlo del recuento de bytes.
musicman523
@ musicman523 Gracias por el consejo!
C McAvoy
3

Jalea , 7 bytes

ÆCÆPaÆP

Pruébalo en línea!

ÆCcuenta el número de números primos menor que o igual a la entrada (así, si la entrada es el n º prime, devuelve n ). Luego ÆPprueba este índice de primalidad. Finalmente, ahace un AND lógico entre este resultado y ÆP(prueba de primalidad) de la entrada original.

Pomo de la puerta
fuente
2

05AB1E , 6 bytes

ÝØ<Øså

Pruébalo en línea!

Explicación

ÝØ<Ø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?
Datboi
fuente
2

Pyth , 12 bytes

&P_QP_smP_dS

Pruébalo en línea!

Explicación

&P_QP_smP_dS
                Implicit input
       mP_dS    Primality of all numbers from 1 to N
      s         Sum of terms (equal to number of primes ≤ N)
    P_          Are both that number
&P_Q            and N prime?
notjagan
fuente
2

Pyke, 8 bytes

sI~p>@hs

Pruébalo aquí!

s        -  is_prime(input)
 I~p>@hs - if ^:
  ~p>    -    first_n_primes(input)
     @   -    ^.index(input)
      h  -   ^+1
       s -  is_prime(^)
Azul
fuente
1

QBIC , 33 bytes

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

Explicación

~   |   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.
Steenbergh
fuente
1

Mathematica, 35 29 bytes

P=Prime;!P@P@Range@#~FreeQ~#&

-6 bytes de @MartinEnder

J42161217
fuente
P@P@Range@#Debería ahorrar un montón.
Martin Ender
1

Haskell, 121 bytes

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)
Sergii Martynenko Jr
fuente
1
(\(_,x)->x)es snd, (\(x,_)->p x)es (p.fst). Tanto fsty sndestán en preludio, así que no hay necesidad de importar.
Laikoni
No utilice acentos abiertos con demasiada frecuencia : r x=elem x$take x s. Sin embargo, en este caso se puede ir pointfree (introducción de acentos abiertos de nuevo) y omitir el nombre de la función: elem<*>(`take`s).
nimi
1

Positron , 148 bytes

x=#(input@@)a=function{p=1;k=$1==2;f=2;while(f<$1)do{p=p*$1%f;k=1;f=f+1};return p*k}r=1;i=2;while(i<x)do{if(a@i)then{r=r+1}i=i+1}print@((a@x*a@r)>0)

Pruébalo en línea!

Hiperneutrino
fuente
1

Matlab, 36 34 bytes

Guardado 2 bytes gracias a Tom Carpenter.

Una implementación muy ingenua usando funciones incorporadas:

isprime(x)&isprime(nzz(primes(x)))
Leander Moesinger
fuente
1
Solo para Octave también puede guardar un byte adicional con(p=@isprime)(x)&p(nnz(primes(x)))
Tom Carpenter
1

Python 2 , 89 bytes

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)

Pruébalo en línea!

Construcciones r, la lista de primos <= n; si n es primo, entonces nes el len(r)'primer primo. Entonces n es un superprime si if n en r y len (r) en r.

Chas Brown
fuente
0

Julia 0.6, 61 bytes

devuelve 1 si x es un superprimado, 0 de lo contrario.

sin usar una función isprime-kind.

x->a=[0,1];for i=3:x push!(a,0i%(2:i-1))end;a[sum(a)]&a[x]
Tanj
fuente