Czy to super prime?

22

tło

Super-prime jest liczbą pierwszą, którego indeks w liście wszystkich liczb pierwszych jest liczbą pierwszą. Sekwencja wygląda następująco:

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

Jest to sekwencja A006450 w OEIS .

Wyzwanie

Biorąc pod uwagę dodatnią liczbę całkowitą, określ, czy jest to super-pierwsza

Przypadki testowe

2: fałsz
3: prawda
4: fałsz
5: prawda
7: fałsz
11: prawda
13: fałsz
17: prawda
709: prawda
851: fałsz
991: prawda

Punktacja

To jest , więc wygrywa najkrótsza odpowiedź w każdym języku.

musicman523
źródło
6
Jaki jest indeks 2 ? Czy to 1 czy 0 ?
Dennis
1
@ Dennis sekwencja ma indeks 1; indeks 2 wynosi 1.
musicman523
2
Pierwsza myśl po przeczytaniu, czym jest super-pierwsza liczba: co nazwałabyś super-super-pierwszymi? A może super ^ 3-liczby pierwsze? Co jest większe, liczba atomów we wszechświecie lub 11. super-11-pierwsza? Ty, drogi człowieku internetowym, kradniesz kolejne kilka godzin moich najlepszych godzin!
J_F_B_M
@J_F_B_M Podejmij wyzwanie! : D
musicman523,
1
@J_F_B_M 11 to super-prime, którego indeks na liście super-prime jest również super-prime (3), więc 11-ty super-prime jest super-super-super-prime
Skidsdev

Odpowiedzi:

21

Galaretka , 5 bajtów

ÆRÆNċ

Wypróbuj online!

Jak to działa

Æ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
źródło
8
Kurwa, do diabła,
3
Zawsze tak robi ...
Gryphon - Przywróć Monikę
@ETHproductions Cóż, rozwiązanie jest dość oczywiste ... to tylko ninja tutaj.
Erik the Outgolfer
14

Mathematica, 26 23 bajtów

Podziękowania dla user202729 za zapisanie 3 bajtów.

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

Wykorzystuje to fakt, że Mathematica pozostawia większość bezsensownych wyrażeń nieocenionych (w tym przypadku logiczną Anddwóch liczb) i Mapmoże być stosowana do dowolnego wyrażenia, nie tylko list. Tak więc obliczamy Andwejściowy i jego indeks główny, który po prostu taki jest, a następnie testujemy Mappierwotność tego wyrażenia, które zamienia dwa operandy z Andlogicznych w taki sposób, że Andmożna je następnie ocenić.

Martin Ender
źródło
1
23 bajtów: PrimeQ/@(#&&PrimePi@#)&.
user202729,
@ user202729 Fajnie, dziękuję. :)
Martin Ender
10

Galaretka , 6 bajtów

ÆRi³ÆP

Wypróbuj online!

Używa tej samej techniki, co moja odpowiedź Japt: Wygeneruj liczby pierwsze do n , uzyskaj indeks n na tej liście i sprawdź, czy jest on pierwotny. Jeśli samo n nie jest liczbą pierwszą, indeks wynosi 0 , co również nie jest liczbą pierwszą, więc i tak zwracane jest 0 .

ETHprodukcje
źródło
9

Japt , 13 11 bajtów

õ fj bU Ä j

Przetestuj online!

Wyjaśnienie

W rzeczywistości jest to bardzo proste, w przeciwieństwie do mojego pierwotnego wniosku:

 õ 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
ETHprodukcje
źródło
4

Python 3 , 104 97 93 bajtów

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

Zwraca 0/ 1, maksymalnie 4 bajty dłużej, jeśli musi to być True/ False.

Wypróbuj online!

C McAvoy
źródło
1
0/1 jest w porządku. Niezła odpowiedź! Ponieważ nigdy nie używasz wartości f, możesz sformatować kod w ten sposób i wykluczyć go z liczby bajtów.
musicman523,
@ musicman523 Dzięki za wskazówkę!
C McAvoy,
3

Galaretka , 7 bajtów

ÆCÆPaÆP

Wypróbuj online!

ÆCzlicza liczbę pierwszą mniejszą lub równą wejściu (więc jeśli wejście jest n- tą liczbą pierwszą, zwraca n ). Następnie ÆPtestuje ten wskaźnik pod kątem pierwszeństwa. Na koniec awykonuje logiczne AND między tym wynikiem a ÆP(testem pierwotności) oryginalnego wejścia.

Klamka
źródło
2

05AB1E , 6 bajtów

ÝØ<Øså

Wypróbuj online!

Wyjaśnienie

ÝØ<Ø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
źródło
2

Pyth , 12 bajtów

&P_QP_smP_dS

Wypróbuj online!

Wyjaśnienie

&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
źródło
2

Pyke, 8 bajtów

sI~p>@hs

Wypróbuj tutaj!

s        -  is_prime(input)
 I~p>@hs - if ^:
  ~p>    -    first_n_primes(input)
     @   -    ^.index(input)
      h  -   ^+1
       s -  is_prime(^)
niebieski
źródło
1

QBIC , 33 bajty

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

Wyjaśnienie

~   |   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
źródło
1

Mathematica, 35 29 bajtów

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

-6 bajtów od @MartinEnder

J42161217
źródło
P@P@Range@#powinien uratować sporo.
Martin Ender
1

Haskell, 121 bajtów

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
źródło
1
(\(_,x)->x)jest snd, (\(x,_)->p x)jest (p.fst). Zarówno fsti sndsą w Prelude, więc nie ma potrzeby importu.
Laikoni
Czy zbyt często nie używać odwrócone, pojedyncze apostrofy : r x=elem x$take x s. Jednak w tym przypadku można przejść pointfree (wprowadzenie odwrócone, pojedyncze apostrofy znowu) i pominąć nazwę funkcji: elem<*>(`take`s).
nimi
1

Positron , 148 bajtów

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)

Wypróbuj online!

HyperNeutrino
źródło
1

Matlab, 36 34 bajtów

Zaoszczędź 2 bajty dzięki Tomowi Carpenterowi.

Bardzo naiwna implementacja wykorzystująca wbudowane funkcje:

isprime(x)&isprime(nzz(primes(x)))
Leander Moesinger
źródło
1
Tylko dla Octave możesz także zapisać kolejny bajt(p=@isprime)(x)&p(nnz(primes(x)))
Tom Carpenter
1

Python 2 , 89 bajtów

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)

Wypróbuj online!

Konstruuje r, lista liczb pierwszych <= n; jeśli n jest liczbą pierwszą, to njest len(r)pierwszą liczbą pierwszą. Więc n jest superpierwszą liczbą iff nw r i len (r) wr.

Chas Brown
źródło
0

Julia 0.6, 61 bajtów

zwraca 1, jeśli x jest liczbą pierwszą, 0 w przeciwnym razie.

bez użycia funkcji rodzaju isprime.

x->a=[0,1];for i=3:x push!(a,0i%(2:i-1))end;a[sum(a)]&a[x]
Tanj
źródło