Sidi多项式系数的绝对和


28

背景

次数为n的Sidi多项式或第(n + 1) Sidi多项式定义如下。

Sidi多项式的定义

Sidi多项式具有几个有趣的性质,但是它们的系数也是如此。后者形成OEIS序列A075513

任务

编写一个完整的程序或函数,给定一个非负整数n,该函数将打印或返回度为n的Sidi多项式的系数的绝对和,即

预期产出的定义

这些和形成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

Answers:



46

Python 2,43个字节

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

在线尝试!

不同的方法

自从发布此挑战以来,我一直试图为该问题提出一个递归解决方案。尽管我只使用笔和纸失败了,但我还是设法将公式转化为高尔夫的实际问题(至少对于某些实用定义而言),这使分析变得更加容易。

想象一个有k + m个候选作品的游戏节目,其工作原理如下。

在第1轮中,所有候选人都必须尽快完成特定任务。该ķ是完成任务最快的候选人赢得的1K $(一个kilodollar)每提前3轮。

在第二轮中,剩下的m个候选人有第二次加入其他k的机会。每个候选人都会被问一个问题。如果他们正确回答了问题,他们将赢得1 k $并进入第3轮。但是,如果他们未能回答问题,他们将被淘汰出局。这意味着第三轮将有kk + m个候选者,具体取决于有多少人可以回答他们的问题。

第三回合包含m个与第一回合相似的竞赛。在每个竞赛中,参与者必须完成特定任务。与第一轮不同的是,只有一名候选人获得奖金,但是所有候选人都可以参加下一场比赛。每场比赛的报酬是之前的两倍。第一个支付2 k $,最后一个支付2 m k $

请注意,由于所有奖品都是2的幂,因此知道候选人获得了多少奖金就意味着我们知道他们是否晋级到第三轮以及赢得了哪些第三轮比赛。

假设您正在观看比赛节目,并且第一轮已经结束,那么您知道哪些k名候选人已经进入第三轮,哪些m名候选人仍停留在第二轮。剩余的奖金可以通过几种方式分配?

一旦我们知道第二轮的m个候选中的哪个已经晋升到第三轮,就可以很容易地计算出此特定情况的可能结果。如果有j名候选人晋级,则第三轮共有k + j名候选人,因此每场比赛k + j可能的结果。与在第3轮个人比赛,这使得第(k + j)的的结果为所有比赛。

现在,j可以取0m之间的任何值,具体取决于第2轮中哪些候选者正确回答。对于j的每个固定值,有j个候选者的m C j个不同组合可能已经推进到第3轮。k个第3个候选者和m个第2个候选者g(m,k)的可能结果总数,我们得到以下公式。

g的公式

如果固定k = 1,则得到以下特殊情况,这构成了解决原始问题的新方法。

Sigma和g之间的关系

递归公式

现在,假设你1轮后的广告的时候睡着了,时间刚刚好,看看谁赢得了第3轮的比赛最后,因此巨奖醒来2 中号 ķ$ 。您没有其他信息,甚至连候选人总共赢了多少奖金都没有。剩余的奖金可以通过几种方式分配?

如果获奖者是一个中号的第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)。有m个第2轮参赛者分别导致g(m-1,k +1)个潜在结果,k个第3轮参赛者导致g(m-1,k + 1)+ g(m-1,k)那些。总结起来,我们得到以下身份。

g的递归公式

与基本情况一起

g的基本情况

这两个公式完全表征了函数g

高尔夫实现

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

(49字节,一旦m下降到0,则0**m产生1)甚至

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

(48个字节,返回True而不是1)将是有效的解决方案,仍有字节需要保存。

如果我们定义一个函数f,该函数将第1轮候选的数目n代替第2轮候选的数目m作为第一个参数,即

f在g方面的定义

我们得到了递归公式

f的递归公式

基本款

f的基本情况

最后,我们有

Sigma和f之间的关系

所以Python实现

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

(一旦n = kk/n产生1)通过基于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

Maxima,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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.