首先它有两个概念——
1、考虑的是组合数概念(无符号的斯特林数)
S ( n , m ) S(n,m) S(n,m)表示把n个不同的球放入m个相同的盒子中,不允许有空盒的方案,而且注意,这个盒子很有意思,这些球只能放成一圈且如果顺序不同也视为不同方案。
2、考虑的是表现升阶函数和降阶函数的各项系数的概念(分为有无符号的斯特林数)
有符号斯特林数表示为 S s S_s Ss反之表示为 S u S_u Su
x n ↓ = x ( x − 1 ) ( x − 2 ) … … ( x − n + 1 ) = ∑ k = 0 n S s ( n , k ) x k x^{n↓}=x(x-1)(x-2)……(x-n+1)=\sum_{k=0}^n S_s(n,k)x^k xn↓=x(x−1)(x−2)……(x−n+1)=∑k=0nSs(n,k)xk
x n ↑ = x ( x + 1 ) ( x + 2 ) … … ( x + n − 1 ) = ∑ k = 0 n S u ( n , k ) x k x^{n↑}=x(x+1)(x+2)……(x+n-1)=\sum_{k=0}^n S_u(n,k)x^k xn↑=x(x+1)(x+2)……(x+n−1)=∑k=0nSu(n,k)xk
(注意,这个升阶函数可以表示为排列数 P x n P_x^n Pxn)
至于如何理解上面两者概念之间的共性。
我有一个方法,不知道对不对。
由于考虑把升阶函数或降阶函数分解并且表达成为一个 系 数 ∗ x k 系数*x^k 系数∗xk的形式。
所以就可以画出一个树状图然后去把x某个次方分门别类。
类似于这样——
把系数合并合并。
于是系数就很像是上面的第一个概念推出来的数了。
至于为什么像,我们可以看到下面的递推式子再来理解。
我们可以看到百度百科,写得很清楚。
于是我就不怎么严谨地口胡一下。
第一个概念——
我们现在有n个球,放入m个盒子中。
现在要多放入一个球,那么就会有两种情况——
1、我们独自在一个新盒子中放入这个球,于是就从 S ( n , m − 1 ) S(n,m-1) S(n,m−1)推过来。
2、由于之前有很多种不同的方案,那么就把这个新的球放在原来任意一个球的左边。
就从 n ∗ S ( n , m ) n*S(n,m) n∗S(n,m)推过来。
S ( n + 1 , m ) = S ( n , m − 1 ) + n ∗ S ( n , m ) S(n+1,m)=S(n,m-1)+n*S(n,m) S(n+1,m)=S(n,m−1)+n∗S(n,m)get√
第二个概念——
直接利用定义+归纳法得到递推式:
∑ k = 0 n + 1 S ( n + 1 , k ) ∗ x k = x n + 1 ↓ = x n ↓ ∗ ( x − n ) = x ∗ ∑ k = 0 n S ( n , k ) ∗ x k − n ∗ ∑ k = 0 n S ( n , k ) ∗ x k \sum_{k=0}^{n+1}S(n+1,k)*x^k=x^{n+1↓}=x^{n↓}*(x-n)=x*\sum_{k=0}^{n}S(n,k)*x^k-n*\sum_{k=0}^{n}S(n,k)*x^k k=0∑n+1S(n+1,k)∗xk=xn+1↓=xn↓∗(x−n)=x∗k=0∑nS(n,k)∗xk−n∗k=0∑nS(n,k)∗xk
依次把 x m x^m xm在左右两边的系数提取出来得:
S ( n + 1 , m ) = S ( n , m − 1 ) − n ∗ S ( n , m ) S(n+1,m)=S(n,m-1)-n*S(n,m) S(n+1,m)=S(n,m−1)−n∗S(n,m)
我们发现,这是在有符号的斯特林数中得到的,
故: S s ( n , m ) = ( − 1 ) n + m ∗ S u ( n , m ) S_s(n,m)=(-1)^{n+m}*S_u(n,m) Ss(n,m)=(−1)n+m∗Su(n,m)
有了递推式,然后干嘛?
三角形!!!
这个东东也是看百度百科学会的(发现的)
下面这个三角形是根据第一个概念推的。
然后,我们考虑上述的无符号斯特林数。
我们惊奇地发现,这个与我们之前的树状图合并同类项后系数是神似的!!!
那么我们就找到了第一个概念与第二个概念之间的共性。
第二个概念——(可以变化一下)
表示在做树状图时,由于第n层可以使上一层某个数的系数变大或使指数+1.
那么在第n层,指数为m时,
这个可以由上一层指数为m-1的情况乘上一个x变成指数为m的情况。
也可以由上一层指数为m的情况乘上当前(x+n)的这个n得到答案。
也就是在类似于dp转移意义上解释了这个第二个概念,且与第一个概念基本相同。
这样再看这两个概念就感觉很亲近啦~
不必多废话,我们继续看到这个神奇的三角形。
由于我们得到了递推公式以及这个三角形的样子,可以得到各种性质——
自百度百科
其实前几项也并不是特别地有用。
而后面的几项看起来很有用,而我不会用。
第一个是经典例题,这里不多讲述。
第二个则是求下面的式子:
∑ i = 1 n i k \sum_{i=1}^ni^k i=1∑nik
这就是大名鼎鼎的自然数幂的和。
然后开始化式子。
根据定义:
C n k = P n k k ! = ∑ i = 0 k ( − 1 ) i + k ∗ S s ( k , i ) n i k ! C_n^k=\frac{P_n^k}{k!}=\frac{\sum_{i=0}^k (-1)^{i+k}*S_s(k,i)n^i}{k!} Cnk=k!Pnk=k!∑i=0k(−1)i+k∗Ss(k,i)ni
把 n k n^k nk提出来:
C n k ∗ k ! = n k + ∑ i = 0 k − 1 ( − 1 ) i + k ∗ S s ( k , i ) n i C_n^k*k!=n^k+\sum_{i=0}^{k-1} (-1)^{i+k}*S_s(k,i)n^i Cnk∗k!=nk+∑i=0k−1(−1)i+k∗Ss(k,i)ni
n k = C n k ∗ k ! − ∑ i = 0 k − 1 ( − 1 ) i + k ∗ S s ( k , i ) n i n^k=C_n^k*k!-\sum_{i=0}^{k-1} (-1)^{i+k}*S_s(k,i)n^i nk=Cnk∗k!−∑i=0k−1(−1)i+k∗Ss(k,i)ni
然后把原来的式子换一下
∑ j = 1 n j k \sum_{j=1}^nj^k ∑j=1njk
套入上述结果,再推:
∑ j = 1 n ( C j k ∗ k ! − ∑ i = 0 k − 1 ( − 1 ) i + k ∗ S s ( k , i ) j i ) \sum_{j=1}^n (C_j^k*k!-\sum_{i=0}^{k-1} (-1)^{i+k}*S_s(k,i)j^i) ∑j=1n(Cjk∗k!−∑i=0k−1(−1)i+k∗Ss(k,i)ji)
去括号
∑ j = 1 n C j k ∗ k ! − ∑ j = 1 n ∑ i = 0 k − 1 ( − 1 ) i + k ∗ S s ( k , i ) j i \sum_{j=1}^n C_j^k*k!-\sum_{j=1}^n \sum_{i=0}^{k-1} (-1)^{i+k}*S_s(k,i)j^i ∑j=1nCjk∗k!−∑j=1n∑i=0k−1(−1)i+k∗Ss(k,i)ji
至此,我们发现推不下去了,那么我们引入一个小小的结论:
∑ i = 0 m C n i = C n + 1 m + 1 \sum_{i=0}^m C_n^i=C_{n+1}^{m+1} ∑i=0mCni=Cn+1m+1
证明?
C n + 1 m + 1 = C n m + C n m + 1 C_{n+1}^{m+1}=C_{n}^m+C_n^{m+1} Cn+1m+1=Cnm+Cnm+1
这个很好理解吧?就是分成两种情况,一种是在这个选第m+1个数,第二种是不选。
有了这个东东,带入原式,然后又会发现出现一样的结论,再带入,再看,就可以发现这个结论是对的!
那好,利用这个结论丢入原式。
C n + 1 k + 1 ∗ k ! − ∑ i = 0 k − 1 ∑ j = 1 n ( − 1 ) i + k ∗ S s ( k , i ) j i C_{n+1}^{k+1}*k!-\sum_{i=0}^{k-1}\sum_{j=1}^n (-1)^{i+k}*S_s(k,i)j^i Cn+1k+1∗k!−∑i=0k−1∑j=1n(−1)i+k∗Ss(k,i)ji
我们设一个函数 f ( n , k ) = ∑ i = 1 n i k f(n,k)=\sum_{i=1}^ni^k f(n,k)=∑i=1nik
原式则为:
C n + 1 k + 1 ∗ k ! − ∑ i = 0 k − 1 ( − 1 ) i + k ∗ S s ( k , i ) ∗ f ( n , i ) C_{n+1}^{k+1}*k!-\sum_{i=0}^{k-1}(-1)^{i+k}*S_s(k,i)*f(n,i) Cn+1k+1∗k!−∑i=0k−1(−1)i+k∗Ss(k,i)∗f(n,i)
然后,如果给你取模数,这个模数是质数,则这条式子已经够用了。
但是如果出题人丧心病狂地把这个模数变成任意数,怎么办?
不用方,只需把前面的组合数改一下即可——
P n + 1 k + 1 k + 1 − ∑ i = 0 k − 1 ( − 1 ) i + k ∗ S s ( k , i ) ∗ f ( n , i ) \frac {P_{n+1}^{k+1}}{k+1}-\sum_{i=0}^{k-1}(-1)^{i+k}*S_s(k,i)*f(n,i) k+1Pn+1k+1−∑i=0k−1(−1)i+k∗Ss(k,i)∗f(n,i)
然后这个 P = ( n + 1 ) ( n ) ( n − 1 ) ( n − 2 ) … … ( ( n + 1 ) − ( k + 1 ) + 1 ) P=(n+1)(n)(n-1)(n-2)……((n+1)-(k+1)+1) P=(n+1)(n)(n−1)(n−2)……((n+1)−(k+1)+1)
然后这是连续的k+1个数,然后这连续的k+1个数中,必然存在一个是k+1的倍数的数。
所以就可以不用关心逆元了。
(听说这玩意可以用第一类斯特林数的同胞第二类斯特林数来求,管它呢!)
时间为 O ( k 2 ∗ ( 比 较 大 的 常 数 ) ) O(k^2*(比较大的常数)) O(k2∗(比较大的常数))
我不费!
我还是太弱了,听大佬说可以利用这个东东求通项公式。