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.


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:



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.


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.


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

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!


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.



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?

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?



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.

1

Mathematica, 35 29 Bytes

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

-6 Bytes von @MartinEnder


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)

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

Matlab, 36 34 Bytes

2 Bytes gespart dank Tom Carpenter.

Eine sehr naive Implementierung mit integrierten Funktionen:

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

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.



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]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.