슈퍼 프라임입니까?


22

배경

슈퍼 프라임은 인덱스가 모두 소수의 목록도 소수 소수입니다. 순서는 다음과 같습니다.

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

이것은 OEIS의 시퀀스 A006450입니다 .

도전

양의 정수가 주어지면 슈퍼 프라임인지 확인하십시오.

테스트 사례

2 : 거짓
3 : 맞다
4 : 거짓
5 : 사실
7 : 거짓
11 : 사실
13 : 거짓
17 : 맞다
709 : 참
851 : 거짓
991 : 참

채점

이것은 이므로 각 언어에서 가장 짧은 답변이 이깁니다.


6
2 의 색인은 무엇입니까 ? 그것은가 1 또는 0 ?
Dennis

1
@Dennis 시퀀스는 1 인덱스입니다. 2의 색인은 1입니다.
musicman523

2
슈퍼 프라임이 무엇인지 읽은 후 처음으로 생각한 것 : 슈퍼 프라임은 무엇입니까? 아니면 슈퍼 ^ 3 프라임? 더 큰 것은, 우주에서 원자의 수 또는 11 번째 초 ^ 11- 프라임? 인터넷 사용자 여러분, 제 주요 시간을 몇 시간 더 훔치고 있습니다!
J_F_B_M

@J_F_B_M 그것을 기반으로 도전하십시오! : D
musicman523

1
@J_F_B_M (11)는 슈퍼 프라임 슈퍼 프라임 목록에서 인덱스의도 인 슈퍼 프라임 (3) 11'th 슈퍼 프라임은 슈퍼 슈퍼 슈퍼 프라임, 그래서
Skidsdev

답변:



14

수학, 26 23 바이트

3 바이트를 저장해 준 user202729에게 감사합니다.

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

이것은 Mathematica가 대부분의 무의미한 표현을 평가하지 않은 채로 남겨두고 (이 경우 And에는 두 숫자 의 논리 ) 사실을 이용하며 Map목록뿐만 아니라 모든 표현에 적용 할 수 있습니다. 그래서 우리 And는 입력과 그것의 소수 인덱스를 계산합니다. 그런 다음 우리 Map는이 표현식에 대한 원시성 테스트를 통해 두 피연산자 And를 부울로 변환 And하여 평가 될 수 있습니다.


1
23 바이트 : PrimeQ/@(#&&PrimePi@#)&.
user202729

@ user202729 감사합니다. :)
Martin Ender

10

젤리 , 6 바이트

ÆRi³ÆP

온라인으로 사용해보십시오!

내 Japt 답변과 동일한 기술을 사용합니다. 최대 n 까지의 소수를 생성하고 해당 목록에서 n 의 인덱스를 얻은 다음 소수성을 확인하십시오. 경우 n 개의 자체 것은 소수 아니라, 인덱스는 0 , 그래서 또한 주요하지 않은, 0 어쨌든 반환됩니다.


9

Japt , 13 11 바이트

õ fj bU Ä j

온라인으로 테스트하십시오!

설명

이것은 원래의 제출과 달리 실제로 매우 간단합니다.

 õ 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

파이썬 3 , 104 97 93 바이트

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

반품 0/ 1가 될 경우, 대부분의에서 4 이상 바이트 True/False .

온라인으로 사용해보십시오!


1
0/1은 괜찮습니다. 좋은 대답입니다! 의 값을 사용하지 않기 때문에 f코드를 이와 같이 다시 포맷 하고 바이트 수에서 제외 할 수 있습니다.
musicman523

팁을 주셔서 감사합니다!
C McAvoy

3

젤리 , 7 바이트

ÆCÆPaÆP

온라인으로 사용해보십시오!

ÆC입력 이하의 소수의 수를 계산합니다 (따라서 입력이 n 번째 소수이면 n 을 반환합니다 ). 그런 다음 ÆP이 색인의 우선 순위를 테스트합니다. 마지막 a으로이 결과와 ÆP원래 입력의 (우선 테스트) 사이에 논리 AND를 수행합니다 .



2

05AB1E , 6 바이트

ÝØ<Øså

온라인으로 사용해보십시오!

설명

ÝØ<Ø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 바이트

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

설명

~   |   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 바이트

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

@MartinEnder에서 -6 바이트


P@P@Range@#무리를 저장해야합니다.
Martin Ender

1

하스켈, 121 바이트

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). 모두 fstsnd수입에 대한 필요 때문에, 서곡에 있습니다.
Laikoni

너무 자주 역 따옴표를 사용하지 마십시오 : r x=elem x$take x s. 그러나이 경우 포인트 프리 (백틱 다시 소개)로 가서 함수 이름을 생략 할 수 있습니다 elem<*>(`take`s).
nimi



1

MATLAB, 36 34 바이트

Tom Carpenter 덕분에 2 바이트를 절약했습니다.

내장 함수를 사용한 매우 순진한 구현 :

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

1
Octave의 경우 다음을 사용하여 추가 바이트를 저장할 수도 있습니다.(p=@isprime)(x)&p(nnz(primes(x)))
Tom Carpenter



0

줄리아 0.6, 61 바이트

x가 슈퍼 프라임이면 1을, 그렇지 않으면 0을 반환합니다.

isprime-kind 기능을 사용하지 않고

x->a=[0,1];for i=3:x push!(a,0i%(2:i-1))end;a[sum(a)]&a[x]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.