Ist es ein Super-Prime?

22

Hintergrund

Eine Super-Primzahl ist eine Primzahl, deren Index in der Liste aller Primzahlen ebenfalls eine Primzahl ist. Die Sequenz sieht folgendermaßen aus:

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

Dies ist die Sequenz A006450 im OEIS .

Herausforderung

Bestimmen Sie bei einer positiven Ganzzahl, ob es sich um eine Super-Primzahl handelt.

Testfälle

2: falsch
3: wahr
4: falsch
5: wahr
7: falsch
11: wahr
13: falsch
17: wahr
709: wahr
851: falsch
991: wahr

Wertung

Das ist , also gewinnt die kürzeste Antwort in jeder Sprache.

musicman523
quelle
6
Was ist der Index von 2 ? Ist es 1 oder 0 ?
Dennis
1
@ Tennis die Sequenz ist 1-indiziert; Der Index von 2 ist 1.
musicman523
2
Erster Gedanke nach dem Lesen, was ein Super-Prim ist: Was würden Sie Super-Super-Primes nennen? Oder super ^ 3-Primzahlen? Was ist größer, die Anzahl der Atome im Universum oder die 11. Super-11-Primzahl? Du, liebe Internet-Person, stiehlst noch ein paar Stunden meiner Stunden meiner besten Zeit!
J_F_B_M
@J_F_B_M Mach eine Herausforderung daraus! : D
musicman523
1
@J_F_B_M 11 ist ein Super-Prime, dessen Index in der Super-Prime-Liste auch ein Super-Prime ist (3), daher ist der 11. Super-Prime ein Super-Super-Super-Prime
Skidsdev

Antworten:

21

Gelee , 5 Bytes

ÆRÆNċ

Probieren Sie es online!

Wie es funktioniert

Æ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
quelle
8
Meine Güte
3
Er tut immer ...
Gryphon - Wiedereinsetzung von Monica
@ETHproductions Nun, die Lösung ist ziemlich offensichtlich ... es ist nur der Ninja hier.
Erik der Outgolfer
14

Mathematica, 26 23 Bytes

Vielen Dank an user202729 für das Speichern von 3 Bytes.

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

Dies nutzt die Tatsache, dass Mathematica die meisten unsinnigen Ausdrücke unbewertet lässt (in diesem Fall die Logik Andvon zwei Zahlen) und Mapauf jeden Ausdruck angewendet werden kann, nicht nur auf Listen. Wir berechnen also das Andvon der Eingabe und ihrem Primzahlindex, was einfach so bleibt, und dann Mapden Primalitätstest über diesen Ausdruck, der die beiden Operanden von Andin Boolesche Werte umwandelt, so dass das Anddann ausgewertet werden kann.

Martin Ender
quelle
1
23 Bytes PrimeQ/@(#&&PrimePi@#)&.
User202729
@ user202729 Schön, danke. :)
Martin Ender
10

Gelee , 6 Bytes

ÆRi³ÆP

Probieren Sie es online!

Verwendet die gleiche Technik wie meine Japt-Antwort: Generiere die Primzahlen bis n , ermittle den Index von n in dieser Liste und überprüfe, ob sie eine Primalität haben. Wenn n selbst keine Primzahl ist, ist der Index 0 , was ebenfalls keine Primzahl ist. Daher wird trotzdem 0 zurückgegeben.

ETHproductions
quelle
9

Japt , 13 11 Bytes

õ fj bU Ä j

Online testen!

Erläuterung

Dies ist eigentlich sehr einfach, im Gegensatz zu meiner ursprünglichen Einreichung:

 õ 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
ETHproductions
quelle
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))]))

Gibt 0/ zurück 1, höchstens 4 Bytes länger, wenn es True/ sein muss False.

Probieren Sie es online!

C McAvoy
quelle
1
0/1 ist in Ordnung. Gute Antwort! Da Sie den Wert von nie verwenden f, können Sie Ihren Code auf diese Weise neu formatieren und ihn von der Byteanzahl ausschließen.
musicman523
@ musicman523 Danke für den Tipp!
C McAvoy
3

Gelee , 7 Bytes

ÆCÆPaÆP

Probieren Sie es online!

ÆCzählt die Anzahl der Primzahlen, die kleiner oder gleich der Eingabe sind (wenn die Eingabe also die n- te Primzahl ist, wird n zurückgegeben ). Dann ÆPprüft dieser Index auf Primalität. Führt schließlich aein logisches UND zwischen diesem Ergebnis und ÆP(Primärtest) der ursprünglichen Eingabe durch.

Türknauf
quelle
2

05AB1E , 6 Bytes

ÝØ<Øså

Probieren Sie es online!

Erläuterung

ÝØ<Ø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
quelle
2

Pyth , 12 Bytes

&P_QP_smP_dS

Probieren Sie es online!

Erläuterung

&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
quelle
2

Pyke, 8 Bytes

sI~p>@hs

Probieren Sie es hier aus!

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

QBIC , 33 Bytes

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

Erläuterung

~   |   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
quelle
1

Mathematica, 35 29 Bytes

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

-6 Bytes von @MartinEnder

J42161217
quelle
P@P@Range@#sollte ein paar retten.
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
quelle
1
(\(_,x)->x)ist snd, (\(x,_)->p x)ist (p.fst). Beide fstund sndsind im Prelude, daher kein Import nötig.
Laikoni
Sie Backticks nicht benutzen oft : r x=elem x$take x s. In diesem Fall können Sie jedoch pointfree (Einführung von Backticks wieder) und lassen Sie die Funktionsnamen gehen: 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)

Probieren Sie es online!

HyperNeutrino
quelle
1

Matlab, 36 34 Bytes

2 Bytes gespart dank Tom Carpenter.

Eine sehr naive Implementierung mit integrierten Funktionen:

isprime(x)&isprime(nzz(primes(x)))
Leander Moesinger
quelle
1
Nur für Octave können Sie auch ein weiteres Byte mit(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)

Probieren Sie es online!

Konstruiert rdie Liste der Primzahlen <= n; Wenn n Primzahl ist, dann nist es die len(r)'te Primzahl. Also ist n eine Superprimzahl iff n in r und len (r) in r.

Chas Brown
quelle
0

Julia 0,6, 61 Bytes

Gib 1 zurück, wenn x eine Super-Primzahl ist, sonst 0.

ohne Verwendung einer isprime-kind-Funktion.

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