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.


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:



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.


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.


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

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!


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.



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?

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?

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


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.

1

Mathematica, 35 29 byte

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

-6 byte dari @MartinEnder


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)

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

Matlab, 36 34 byte

Disimpan 2 byte berkat Tom Carpenter.

Implementasi yang sangat naif menggunakan fungsi bawaan:

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

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.



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]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.