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.


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:



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ć.


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 .


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

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!


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.



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?

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?



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.


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)

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

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

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.



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]
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.