Apakah ini super-prime?

22

Latar Belakang

Sebuah super prima adalah bilangan prima yang indeks dalam daftar semua bilangan prima juga perdana. Urutannya terlihat seperti ini:

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

Ini adalah urutan A006450 dalam OEIS .

Tantangan

Diberi bilangan bulat positif, tentukan apakah bilangan super-prima.

Uji Kasus

2: salah
3: benar
4: salah
5: benar
7: salah
11: benar
13: salah
17: benar
709: benar
851: salah
991: benar

Mencetak gol

Ini adalah , jadi jawaban tersingkat di setiap bahasa menang.

musicman523
sumber
6
Apa indeks 2 ? Apakah 1 atau 0 ?
Dennis
1
@ Dennis urutannya adalah 1-diindeks; indeks 2 adalah 1.
musicman523
2
Pikiran pertama setelah membaca apa yang super-prima adalah: Apa yang Anda sebut super-prima? Atau super ^ 3-bilangan prima? Apa yang lebih besar, jumlah atom di alam semesta atau super 11 ^ 11-prime? Anda, orang internet terkasih, mencuri beberapa jam lagi dari jam tayang utama saya!
J_F_B_M
@J_F_B_M Buat tantangan berdasarkan itu! : D
musicman523
1
@J_F_B_M 11 adalah super-prime siapa indeks dalam daftar super-prima juga super-prime (3), sehingga super-prime ke-11 adalah super-super-super-prime
Skidsdev

Jawaban:

21

Jelly , 5 byte

ÆRÆNċ

Cobalah online!

Bagaimana itu bekerja

Æ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
sumber
8
Astaga, Anda menang lagi ...
ETHproduk
3
Dia selalu melakukan ...
Gryphon - Reinstate Monica
@ ETHproductions Nah, solusinya cukup jelas ... hanya ninja di sini.
Erik the Outgolfer
14

Mathematica, 26 23 byte

Terima kasih kepada user202729 untuk menghemat 3 byte.

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

Ini memanfaatkan fakta bahwa Mathematica membuat sebagian besar ungkapan yang tidak masuk akal tidak dievaluasi (dalam hal ini, logika Anddua angka) dan Mapdapat diterapkan ke ekspresi apa pun, bukan hanya daftar. Jadi kita menghitung Andinput dan indeks utamanya, yang tetap seperti itu, dan kemudian kita Mapuji primality atas ekspresi ini yang mengubah dua operan Andmenjadi boolean, sehingga Andkemudian dapat dievaluasi.

Martin Ender
sumber
1
23 byte: PrimeQ/@(#&&PrimePi@#)&.
user202729
@ user202729 Bagus, terima kasih. :)
Martin Ender
10

Jelly , 6 byte

ÆRi³ÆP

Cobalah online!

Gunakan teknik yang sama dengan jawaban Japt saya: Hasilkan bilangan prima hingga n , dapatkan indeks n dalam daftar itu, dan periksa primality. Jika n itu sendiri tidak prima, indeksnya adalah 0 , yang juga tidak prima, jadi 0 tetap dikembalikan.

Produksi ETH
sumber
9

Japt , 13 11 byte

õ fj bU Ä j

Uji secara online!

Penjelasan

Ini sebenarnya sangat mudah, tidak seperti pengiriman asli saya:

 õ 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
Produksi ETH
sumber
4

Python 3 , 104 97 93 byte

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

Mengembalikan 0/ 1, paling banyak 4 byte lebih lama jika harus True/ False.

Cobalah online!

C McAvoy
sumber
1
0/1 baik-baik saja. Jawaban bagus! Karena Anda tidak pernah menggunakan nilai f, Anda dapat memformat ulang kode Anda seperti ini dan mengeluarkannya dari jumlah byte.
musicman523
@ musicman523 Terima kasih atas tipnya!
C McAvoy
3

Jelly , 7 byte

ÆCÆPaÆP

Cobalah online!

ÆCmenghitung jumlah bilangan prima kurang dari atau sama dengan input (jadi, jika input adalah bilangan prima n , ia mengembalikan n ). Kemudian ÆPuji indeks ini untuk mengetahui keaslian. Akhirnya, aapakah AND logis antara hasil ini dan ÆP(uji keaslian) dari input asli.

Gagang pintu
sumber
2

05AB1E , 6 byte

ÝØ<Øså

Cobalah online!

Penjelasan

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

Pyth , 12 byte

&P_QP_smP_dS

Cobalah online!

Penjelasan

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

Pyke, 8 byte

sI~p>@hs

Coba di sini!

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

QBIC , 33 byte

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

Penjelasan

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

Mathematica, 35 29 byte

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

-6 byte dari @MartinEnder

J42161217
sumber
P@P@Range@#harus menyimpan banyak.
Martin Ender
1

Haskell, 121 byte

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
sumber
1
(\(_,x)->x)adalah snd, (\(x,_)->p x)adalah (p.fst). Keduanya fstdan sndberada di Prelude, jadi tidak perlu impor.
Laikoni
Jangan gunakan tanda kutip mundur terlalu sering : r x=elem x$take x s. Namun, dalam kasus ini Anda dapat pergi pointfree (memperkenalkan tanda kutip mundur lagi) dan menghilangkan nama fungsi: elem<*>(`take`s).
nimi
1

Positron , 148 byte

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)

Cobalah online!

HyperNeutrino
sumber
1

Matlab, 36 34 byte

Disimpan 2 byte berkat Tom Carpenter.

Implementasi yang sangat naif menggunakan fungsi bawaan:

isprime(x)&isprime(nzz(primes(x)))
Leander Moesinger
sumber
1
Untuk Oktaf saja Anda juga dapat menyimpan byte lebih lanjut dengan(p=@isprime)(x)&p(nnz(primes(x)))
Tom Carpenter
1

Python 2 , 89 byte

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)

Cobalah online!

Konstruksi r, daftar bilangan prima <= n; jika n adalah prima, maka nadalah len(r)'prime th. Jadi n adalah super prima iff n in r dan len (r) di r.

Chas Brown
sumber
0

Julia 0,6, 61 byte

kembalikan 1 jika x adalah super-prime, 0 sebaliknya.

tanpa menggunakan fungsi isprime.

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