Nó có phải là một siêu nguyên tố?


22

Lý lịch

Một siêu nguyên tố là một số nguyên tố có chỉ số trong danh sách tất cả các số nguyên tố cũng là số nguyên tố. Trình tự trông như thế này:

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

Đây là trình tự A006450 trong OEIS .

Thử thách

Cho một số nguyên dương, xác định xem nó có phải là siêu nguyên tố hay không.

Các trường hợp thử nghiệm

2: sai
3: đúng
4: sai
5: đúng
7: sai
11: đúng
13: sai
17: đúng
709: đúng
851: sai
991: đúng

Chấm điểm

Đây là , vì vậy câu trả lời ngắn nhất trong mỗi ngôn ngữ sẽ thắng.


6
Chỉ số của 2 là gì? Là 1 hay 0 ?
Dennis

1
@Dennis trình tự là 1 chỉ mục; chỉ số của 2 là 1.
sĩ523

2
Suy nghĩ đầu tiên sau khi đọc siêu nguyên tố là gì: Bạn sẽ gọi siêu siêu nguyên tố là gì? Hoặc siêu ^ 3 số nguyên tố? Cái gì lớn hơn, số lượng nguyên tử trong vũ trụ hay siêu thứ 11 ^ 11-Prime? Bạn, người internet thân yêu, đang ăn cắp một vài giờ trong giờ chính của tôi!
J_F_B_M

@J_F_B_M Thực hiện thử thách dựa trên nó! : D
nhạcman523

1
@J_F_B_M 11 là một siêu thủ tướng, chỉ số trong danh sách siêu nguyên tố cũng là một siêu thủ tướng (3), vì vậy, siêu thủ tướng thứ 11 là một siêu siêu siêu
Skidsdev

Câu trả lời:



14

Toán học, 26 23 byte

Cảm ơn user202729 vì đã tiết kiệm 3 byte.

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

Điều này sử dụng thực tế là Mathicala để lại hầu hết các biểu thức vô nghĩa (trong trường hợp này là logic Andcủa hai số) và Mapcó thể được áp dụng cho bất kỳ biểu thức nào, không chỉ các danh sách. Vì vậy, chúng tôi tính toán Andđầu vào và chỉ số chính của nó, vẫn duy trì như vậy, và sau đó chúng tôi Mapkiểm tra tính nguyên thủy đối với biểu thức này để biến hai toán hạng của Andbooleans thành sao cho Andcó thể đánh giá được.


1
23 byte : PrimeQ/@(#&&PrimePi@#)&.
dùng202729

@ user202729 Rất vui, cảm ơn bạn. :)
Martin Ender

10

Thạch , 6 byte

ÆRi³ÆP

Hãy thử trực tuyến!

Sử dụng kỹ thuật tương tự như câu trả lời Japt của tôi: Tạo các số nguyên tố lên đến n , lấy chỉ số của n trong danh sách đó và kiểm tra xem nó có nguyên thủy không. Nếu bản thân n không phải là số nguyên tố thì chỉ số là 0 , cũng không phải là số nguyên tố, vì vậy 0 được trả về.


9

Japt , 13 11 byte

õ fj bU Ä j

Kiểm tra nó trực tuyến!

Giải trình

Điều này thực sự rất đơn giản, không giống như đệ trình ban đầu của tôi:

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

Trả về 0/ 1, nhiều nhất là 4 byte nếu nó phải là True/ False.

Hãy thử trực tuyến!


1
0/1 là ổn. Câu trả lời tốt đẹp! Vì bạn không bao giờ sử dụng giá trị của f, bạn có thể định dạng lại mã của mình như thế này và loại trừ nó khỏi số byte.
sĩ523

@ musicman523 Cảm ơn vì tiền boa!
C McAvoy

3

Thạch , 7 byte

ÆCÆPaÆP

Hãy thử trực tuyến!

ÆCđếm số lượng các số nguyên tố nhỏ hơn hoặc bằng đầu vào (vì vậy, nếu đầu vào là số nguyên tố thứ n , nó sẽ trả về n ). Sau đó ÆPkiểm tra chỉ số này cho tính nguyên thủy. Cuối cùng, athực hiện logic VÀ giữa kết quả này và ÆP(kiểm tra tính nguyên thủy) của đầu vào ban đầu.



2

05AB1E , 6 byte

ÝØ<Øså

Hãy thử trực tuyến!

Giải trình

ÝØ<Ø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?




1

QBIC , 33 byte

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

Giải trình

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

Toán học, 35 29 byte

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

-6 byte từ @MartinEnder


P@P@Range@#nên tiết kiệm một bó.
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)snd, (\(x,_)->p x)(p.fst). Cả hai fstsndđều ở trong Prelude, vì vậy không cần nhập khẩu.
Laikoni

Đừng sử dụng backticks quá thường xuyên : r x=elem x$take x s. Tuy nhiên, trong trường hợp này, bạn có thể truy cập pointfree (giới thiệu lại backticks) và bỏ qua tên hàm : elem<*>(`take`s).
nimi



1

Matlab, 36 34 byte

Đã lưu 2 byte nhờ Tom Carpenter.

Một triển khai rất ngây thơ sử dụng các hàm dựng sẵn:

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

1
Chỉ với Octave, bạn cũng có thể lưu thêm một byte với(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)

Hãy thử trực tuyến!

Xây dựng r, danh sách các số nguyên tố <= n; nếu n là số nguyên tố, thì đó nlà số len(r)nguyên tố thứ. Vì vậy, n là một siêu nguyên tố iff n trong r và len (r) trong r.



0

Julia 0,6, 61 byte

trả về 1 nếu x là siêu nguyên tố, 0 nếu không.

mà không sử dụng hàm isprime.

x->a=[0,1];for i=3:x push!(a,0i%(2:i-1))end;a[sum(a)]&a[x]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.