파스칼 프라임인가?


18

홀수 프라임은 파스칼의 삼각형에 정확히 두 번 나타날 것입니다. 그러나 파스칼의 삼각형에 정확히 두 번 나타나는 숫자가 모두 소수는 아닙니다. 우리는이 숫자를 파스칼 프라임이라고 부릅니다.

파스칼 프라임은 파스칼의 삼각형에서 정확히 두 번 나타나는 복합 숫자입니다. 처음 몇 개의 파스칼 프라임은

4, 8, 9, 12, 14, 16, 18, ...

n 이 파스칼 프라임인지 아닌지 에 따라 양의 정수 n 을 입력으로 사용하고 true 또는 false를 출력해야합니다 . 이것은 코드 골프이므로 가장 짧은 프로그램이 승리합니다!



2
파스칼 프라임이 아닌 경우 True를 출력 할 수 있습니까?
caird coinheringaahing

이 시퀀스는 OEIS 시퀀스 A002808OEIS 시퀀스 A137905 의 교집합입니다 .
완전히 인간적인

@cairdcoinheringaahing 아니오, 주어진 요구 사항에 있어야합니다.
Simply Beautiful Art

Pascal에 아무도 답변을 게시하지 않은 것이 놀랍습니다. 나는 시간을 얻는다면 (그리고 나는 나의 오래된 파스칼 컴파일러를 찾을 수 있다면) 할 것이다.
manassehkatz-Reinstate Monica

답변:


10

Wolfram Language (Mathematica) , 45 바이트

CompositeQ@#&&Binomial~Array~{#-1,#}~FreeQ~#&

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

모든 복합 번호 n 은 행 n 에 정확히 두 번 표시되며 이후에 표시 할 수 없습니다. 따라서 파스칼 프라임의 조건은 첫 n-1 행 내에 전혀 나타나지 않습니다 .

내가 알 수있는 한, 이것은 처음 n 행 내에서 정확히 두 번 나타나고 !PrimeQ대신 사용할 수 있는지 확인하는 것보다 짧습니다 .


4

파이썬 2 , 93 바이트

def f(n):l=[1];exec"(n in l)>=any(n%k<1for k in range(2,n))>q;l=map(sum,zip([0]+l,l+[0]));"*n

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

이것은라는 함수이다 F 로 출력 종료 코드 , 0 파스칼 소수에 대해 1 , 그렇지.

어떻게 작동합니까?

def f(n):l=[1];                       # Define a function f (arg. n) and a list l = [1].
exec"..."*n                           # Execute n times.
(n in l)                              # Boolean: "n is in l?" is greater than...
   >=any(n%k<1for k in range(2,n))    # the boolean: "Is n composite?"?
            >q;                       # If the boolean comparison returns a falsy
                                      # result, then continue on without any difference.
                                      # Otherwise, evaluate the other part of the
                                      # inequality, thus performing "is greater than q".
                                      # Since we have no variable "q", this terminates
                                      # with exit code 1, throwing a "NameError".
l=map(sum,zip([0]+l,l+[0]));          # Generate the next row in Pascal's triangle,
                                      # By zipping l prepended with a 0 with l appended
                                      # with a 0 and mapping sum over the result.

이것은 기본적으로 n 이 파스칼 삼각형 의 첫 번째 n-1 행 에서 발생 하는지 또는 소수인지 확인 하고이 두 조건 중 하나라도 충족되면 오류를 발생시킵니다.

ovs 덕분에 1 바이트가 절약되었습니다 .



@ovs : o 그것은 영리하다! 감사.
Mr. Xcoder

4

젤리 , 11 10 9 바이트

덕분에 :

  • -1 바이트를위한 Martin Ender! (또 다른 방법은 (+1)을 사용하고 n2(-2)를 사용하지 마십시오 . 따라서 전체적으로 -1입니다.
  • 버그 수정을위한 Jonathan Allan .
  • 다른 -1 바이트의 Dennis
Ḷc€ḶFċ=ÆP

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

다른 방법 으로, 조나단 앨런 . (결함)

----------- Explanation -----------
Ḷ            Lowered range. [0, 1, ..., n-1]
 c€Ḷ           `c`ombination `€`ach with `Ḷ`owered range [0...n-1]
    F        Flatten.
     ċ       Count the number of occurences of (n) in the list.
       ÆP    Returns 1 if (n) is a prime, 0 otherwise.
      =      Check equality.

마지막 줄에 대한 설명 :

  • Martin Ender가 지적했듯이 " n파스칼 삼각형에 두 번 나타나는"은 " n첫 번째 n-1행에 나타나지 않는 "과 같습니다 .
  • true숫자가 소수 (즉)가 아니고 ÆP == 0개수 c가 0 이면 반환하려고 합니다. 그것으로부터 우리는 그것을 추론 할 수 있습니다 ÆP == c.
    이들이 같으면 0과 같다는 것을 증명할 수 있습니다.
    • ÆP 부울 값을 반환합니다 (0 또는 1 만 가능).
    • 1을 반환 n하면 소수입니다. 따라서 첫 번째 n-1줄 (즉, c == 0)에 나타나지 않습니다.

1파스칼 프라임이 아닙니다. 이것은 말한다.
Jonathan Allan

Ḷc€ḶFċoÆP¬내가 생각하는 작동합니다.
Jonathan Allan

ċ=ÆP작동해야합니다.
Dennis

참고로 접근 방식에서 결함을 발견하여 삭제했습니다.
Jonathan Allan

BTW도 Ḷcþ`Fċ=ÆP작동해야합니다.
Mr. Xcoder

4

하스켈 , 86 84 바이트

p=[]:[zipWith(+)(1:x)x++[1]|x<-p]
f n=all((>0).rem n)[2..n-1]==any(elem n)(take n p)

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

설명

함수 p 는 퇴행성 파스칼의 삼각형을 재귀 적으로 정의합니다.

[]
[1]
[2,1]
[3,3,1]
[4,6,4,1]
[5,10,10,5,1]

우리가 볼 수 있듯이 (이 솔루션 1은 다소 특별합니다) 모든 숫자 n는 세 n+1번째 행 에 정확히 두 번 나타나고 후속 행의 모든 ​​요소는 더 커지기 때문에 세 번째 행의 n어딘가에 있는지 확인하면 n됩니다. 요소가 실격되었습니다 :

any(elem n)(take(n-1)p)

이제 우리는이 True(제외 배보다 더 나타나는 모든 요소에 대한 1모든 우리의 필요가 잘못된 것입니다, 그래서) isPrime기능을 그 반환 True을위한 1:

all((>0).rem n)[2..n-1]

4

APL (Dyalog) , 44 34 24 19 바이트

@Cowsquack 덕분에 5 바이트 절약

(~0∊⊢|⍨2↓⍳)⍱⊢∊⍳∘.!⍳

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

어떻게?

우리는 둘 다하지 않습니다

-범위 0.. n-1,

⍳∘.! -자기 직교 이항시

⊢∊- 포함 n,

- 아니

⊢|⍨ - n 모듈로의 각 항목

2↓⍳-범위 2..n-1

~0∊-포함하지 않음 0(일명 비분 할)


기차로 변환하는 것이 (∨/1↓1≠⊢∨⍳)∧(~⊢∊⍳∘.!⍳)2 바이트 단축됩니다
Kritixi Lithos

@Cowsquack 흠 나는 기차가 맞을 정도로 너무 짧다는 것을 알지 못했다 (40 바이 터로 시작). 감사!
우리엘

(0∊⊢|⍨2↓⍳)∧∘~⊢∊⍳∘.!⍳또 다른 두 가지에 대해, 나는
우선 성

@Cowsquack oo 영리한. 나는 그 원시성의 변화를 본 적이 없다
Uriel

재 배열이 ~제공 (~0∊⊢|⍨2↓⍳)⍱⊢∊⍳∘.!⍳한 적은 바이트를 위해.
Kritixi Lithos



2

R , 55 바이트

function(n)sum(!n%%1:n)>2&!n%in%outer(1:n-1,1:n,choose)

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

sum(!n%%1:n)>2복합 테스트이며 파스칼 삼각형의 outer(1:n-1,1:n,choose)0을 계산 n-1하므로 n거기에 나타나지 않습니다.


2

05AB1E , 10 바이트

ÝDδcI¢IpÌQ

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

설명

Ý            # push range [0 ... input]
 D           # duplicate
  δc         # double vectorized command binomial
    I¢       # count occurrences of input
      Ip     # check input for primality
        Ì    # add 2
         Q   # compare for equality

확인 n처음에 정확히 두 번 발생하는 N + 1 파스칼 삼각형의 행과 주요 없습니다.
삼각형에서 3 번 발생할 수있는 소수가 없으므로 비교가 작동합니다.





당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.