시디 다항식 계수의 절대 합계


28

배경

정도의 시디 다항식 N - 또는 (N + 1) 번째 시디 다항식 - 다음과 같이 정의된다.

시디 다항식의 정의

시디 다항식에는 몇 가지 흥미로운 속성이 있지만 계수도 마찬가지입니다. 후자는 OEIS 서열 A075513을 형성한다 .

태스크

음이 아닌 정수 주어진 전체 프로그램 또는 기능, 물품 N , 정도의 시디 다항식의 계수의 인쇄 또는 복귀 절대치 합이 n이 , 즉을

의도 된 출력의 정의

이 합은 OEIS 시퀀스 A074932를 형성 합니다.

1 기반 인덱싱을 선호하는 경우 양의 정수 n을 대신 사용하여 n 번째 Sidi 다항식 의 계수의 절대 합을 계산할 수 있습니다 .

이것은 이므로 가능한 한 짧게 코드를 작성해야합니다. 모든 표준 규칙이 적용됩니다.

테스트 사례 (0 기반)

 n           Σ

 0           1
 1           3
 2          18
 3         170
 4        2200
 5       36232
 6      725200
 7    17095248
 8   463936896
 9 14246942336

테스트 사례 (1 기반)

 n           Σ

 1           1
 2           3
 3          18
 4         170
 5        2200
 6       36232
 7      725200
 8    17095248
 9   463936896
10 14246942336

답변:



46

파이썬 2 , 43 바이트

f=lambda n,k=1:k/n or n*f(n,k+1)+k*f(n-1,k)

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

다른 접근법

이 과제를 게시 한 이후로이 문제에 대한 재귀 적 해결책을 찾으려고 노력했습니다. 필자는 펜과 종이 만 사용하는 데 실패했지만 공식을 골프로 바꾸는 데있어 적어도 실용적 정의에 대해서는 실질적인 문제가되어 분석하기가 더 쉬워졌습니다.

다음과 같이 작동 하는 k + m 후보가 있는 게임 쇼를 상상해보십시오 .

1 라운드에서 모든 후보자들은 가능한 빨리 특정 과제를 완수해야합니다. K의 작업을 빠르게 수행 후보이기 1 유전율 $ (하나 kilodollar) 3 라운드 각각 전진.

2 라운드에서 남은 후보 m 명이 다른 k 에 합류 할 두 번째 기회를 얻습니다 . 각 응시자는 질문을받습니다. 그들이 질문에 올바르게 대답하면, 1 k $로 이기고 3 라운드로 진행합니다. 그러나 질문에 대답하지 않으면 게임에서 제외됩니다. 이것은 3 라운드가 질문에 대답 할 수있는 사람의 수에 따라 kk + m 사이의 후보자를 갖습니다 .

3 라운드가 구성되어 m 각 대회에서 1 라운드와 유사하다 더 콘테스트, 참가자들은 특정 작업을 수행해야합니다. 1 라운드와는 달리, 오직 한 명의 후보 만 상을 받지만 모든 후보자는 다음 콘테스트에 참가하게됩니다. 각 콘테스트는 컨테스트보다 2 배의 비용을 지불합니다. 첫번째는 지불 2 유전율 $ 와 마지막 2 K을 $ .

모든 상금은 2의 거듭 제곱이므로 후보자가 얼마나 많은 상금을 받았는지 알면 3 라운드로 진출했는지, 3 라운드에서 어떤 콘테스트에서 우승했는지 알 수 있습니다.

게임 쇼를보고 있고 1 라운드가 이미 끝나고 있다고 가정하면 어떤 k 후보가 이미 3 라운드에 도달했는지, 어떤 m 후보가 2 라운드에 여전히 남아 있는지 알고 있습니다. 나머지 상금은 몇 가지 방법으로 분배 할 수 있습니까?

두 번째 라운드의 m 후보 중 3 라운드로 발전한 것을 알고 나면 이 특정 시나리오에서 가능한 결과를 쉽게 계산할 수 있습니다. 만약 j 후보가 승진하면, 라운드 3에 k + j 총 후보가 있고, 따라서 각 콘테스트에 k + j 가능한 결과가 있습니다. 함께 m 3 라운드의 개별 경연이 차종 (k 값의 J +) m 모든 결과 m의 경연.

이제, j는 사이의 값을 취할 수 0m ,에 따라 후보자의 각 수정 값에 대해 라운드 2에 제대로 대답 J , 거기 m의 C의 J 의 다른 조합 J의 우리가 호출 할 경우 라운드 3으로 고급 수 후보 k 라운드 3 후보와 m 라운드 2 후보 g (m, k)에 대해 가능한 총 결과 수는 다음과 같습니다.

g 공식

k = 1 을 고치면 다음과 같은 특별한 경우가 생겨 원래 문제를 해결하는 새로운 접근 방식이됩니다.

시그마와 g의 관계

재귀 공식

지금, 당신은 1 라운드 후 광고 중에 잠, 그냥 이렇게의 대상 라운드 3의 마지막 대회에서 우승하고 볼 시간에 일어 났을 것으로 가정 2 미터 케이 $를 . 후보자가 총 상금을 얼마나 받았는지에 대한 정보는 없습니다. 남은 상금은 얼마나 많은 방법으로 분배 될 수 있습니까?

승자가 하나 인 경우 m의 2 라운드의 후보자, 지금 벌써 그들은 라운드에 진출해야합니다 것을 3 . 따라서 우리는 3 라운드에서 k + 1 후보를 효과적으로 가지지 만 2 라운드 에서는 m-1 후보 만 있습니다 . 우리는 마지막 콘테스트의 우승자를 알고 있기 때문에 결과가 불확실한 m-1 개의 콘테스트 만 있으므로 g (m -1, k + 1) 가능한 결과.

승자가 2 라운드 건너 뛴 k 후보 중 하나 이면 계산이 약간 까다로워집니다. 이전과 같이 m-1 라운드 만 남았지 만 이제는 3 라운드에 k 명의 후보가 있고 2 라운드에 m 개의 후보자가 있습니다. 2 라운드 후보의 수와 3 라운드 경기의 수가 다르므로 가능한 결과는 없습니다. g 의 간단한 호출로 계산됩니다 . 그러나 첫 번째 라운드 2 후보가 옳고 그름으로 대답 한 후, 라운드 2 후보의 수는 다시 한 번 m-1 라운드 3 대회 와 일치합니다 . 후보자가 승진하면 k + 1 라운드 3 후보가 있으므로 g (m-1, k + 1)가능한 결과; 후보가 제거되면, 라운드 3 후보의 수는 k에 남아 있고 g (m-1, k)의 가능한 결과가 있습니다. 응시자는 진척 여부에 관계없이 g (m-1, k + 1) + g (m-1, k) 가능한 결과가이 두 가지 경우에 결합됩니다.

이제 대상을 수상한 모든 k + m 후보에 대한 잠재적 결과를 추가하면 결과는 g (m, k) 와 일치해야합니다 . 각각 g (m-1, k + 1)의 결과로 이어지는 m 라운드 2 명의 참가자가 있으며, g (m-1, k + 1) + g (m-1, k)로 이어지는 k 라운드 3 명의 참가자가 있습니다. 그들. 요약하면 다음과 같은 정체성을 얻습니다.

g의 재귀 공식

기본 케이스와 함께

g의 기본 케이스

이 두 공식은 함수 g를 완전히 특성화합니다 .

골프 구현

동안

g=lambda m,k=1:0**m or(m+k)*g(m-1,k+1)+k*g(m-1,k)

(49 바이트, 0**m산출 후에는 m이 떨어진다 0 ) 또는

g=lambda m,k=1:m<1 or(m+k)*g(m-1,k+1)+k*g(m-1,k)

(48 바이트, 1 대신 True 반환 ) 유효한 솔루션이 될 것입니다. 아직 저장할 바이트가 있습니다.

첫 번째 인수로 라운드 2 후보 의 개수 m 대신 라운드 n 후보 의 개수 n 을 취하는 함수 f 를 정의하면 , 즉

g의 관점에서 f의 정의

우리는 재귀 공식을 얻습니다

f의 재귀 공식

기본 케이스

f의 기본 사례

마지막으로

시그마와 f의 관계

그래서 파이썬 구현

f=lambda n,k=1:k/n or n*f(n,k+1)+k*f(n-1,k)

( k/n수율 1N = K가 1) 기반 인덱싱 당면한 과제를 해결한다.




3

MATL , 12 바이트

t:XnG:QG^*sQ

입력은 0을 기준으로합니다.

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

설명

5예를 들어 입력 을 고려하십시오 .

t      % Take n implicitly. Duplicate
       % STACK: 5, 5
:      % Range [1 2 ...n]
       % STACK: 5, [1 2 3 4 5]
Xn     % N-choose-k, vectorized
       % STACK: [5 10 10 5 1]
G:Q    % Push [2 3 ... n+1]
       % STACK: [5 10 10 5 1], [2 3 4 5 6]
G^     % Raise to n
       % STACK: [5 10 10 5 1], [32 243 1024 3125 7776]
*      % Multiply, element-wise
       % STACK: [160 2430 10240 15625 7776]
s      % Sum of array
       % STACK: 36231
Q      % Add 1. Display implicitly
       % STACK: 36232

2

R, 36 바이트

sum(choose(n<-scan(),0:n)*(0:n+1)^n)

공식을 적용 할 때 R의 벡터화가 유용합니다.


2

J , 19 바이트

+/@((!{:)*>:^{:)@i.

하나의 기반 인덱싱을 사용합니다.

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

설명

+/@((!{:)*>:^{:)@i.  Input: integer n
                 i.  Range [0, 1, ..., n-1]
   (           )@    Operate on that range
             {:        Get the last value, n-1
          >:           Increment, range becomes [1, 2, ..., n]
            ^          Exponentiate. [1^(n-1), 2^(n-1), ..., n^(n-1)]
    ( {:)              Get the last value, n-1
     !                 Binomial coefficient. [C(n-1, 0), C(n-1, 1), ..., C(n-1, n-1)]
         *             Multiply
+/@                  Reduce by addition

1

맥시마, 39 바이트

f(n):=sum(binomial(n,k)*(k+1)^n,k,0,n);


0

공리, 39 바이트

f(n)==sum(binomial(n,i)*(i+1)^n,i=0..n)

테스트 코드 및 결과

(35) -> [[i,f(i)] for i in 0..9]
   (35)
   [[0,1], [1,3], [2,18], [3,170], [4,2200], [5,36232], [6,725200],
    [7,17095248], [8,463936896], [9,14246942336]]

0

젤리 , 9 바이트

cR×R‘*ƊS‘

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

작동 원리

cR×R‘*ƊS‘ - Main link. Argument: n (integer)        e.g.   5
 R        - Range from 1 to n                              [1, 2, 3, 4, 5]
c         - Binomial coefficient                           [5, 10, 10, 5, 1]
      Ɗ   - Last three links as a monad:
   R      -   Link 1: Range from 1 to n                    [1, 2, 3, 4, 5]
    ‘     -   Link 2: Increment                            [2, 3, 4, 5, 6]
     *    -   Link 3: To the power of n                    [32, 243, 1024, 3125, 7776]
  ×       - Multiply, pairwise                             [160, 2430, 10240, 15625, 7776]
       S  - Sum                                            36231
        ‘ - Increment                                      36232
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.