又要开新坑了,这可是个庞大工程。不定期更新!!!
Definition: Stirling number of the second kind is the number of ways to partition a set of n objects into k non-empty subsets and is denoted by
S(n,k)
S(n,k)=S(n−1,k−1)+kS(n−1,k)n≥k≥1
S(0,0)=1S(n,0)=S(0,k)=0
Generating functions:
#include <stdio.h>
#include <algorithm>
using namespace std;
const int prime = 1000000007;
int main() {
int n, k;
scanf_s("%d%d", &n, &k);
int *S = new int[n + 2];//Stirling S(n,k)->S(k)
//S(n, k) = S(n - 1, k - 1) + k * S(n - 1, k);
S[0] = 0; S[1] = 1;//n=1
for (int i = 2; i <= n; ++i) {
S[i] = 0;
int sj_pre = S[0], sj = S[1];
for (int j = 1; j <= i; ++j) {
S[j] = sj_pre + j*sj;
sj_pre = sj;
sj = S[j + 1];
}
}
for (int i = 0; i <= n; ++i)
printf("%d ", S[i]);
system("pause");
return 0;
}