--- /dev/null
+#include <stdio.h>
+
+#define MAX 13
+
+// Faktorial
+int f(int n)
+{
+ static int ff[MAX] = { 1 };
+ if (!ff[n])
+ ff[n] = n*f(n-1);
+ return ff[n];
+}
+
+// Satnarka
+int s(int d)
+{
+ int r = 0;
+ int sg = 1;
+ for (int k=0; k<=d; k++)
+ {
+ r += sg*f(d)/f(k);
+ sg = -sg;
+ }
+ return r;
+}
+
+// Castecne restrikce
+int n0(int z, int d)
+{
+ static int nn[MAX][MAX];
+ if (!nn[z][d])
+ {
+ if (!z)
+ nn[z][d] = f(d);
+ else if (z == d)
+ nn[z][d] = s(d);
+ else
+ nn[z][d] = z*n0(z-1,d-1) + (d-z)*n0(z,d-1);
+ }
+ return nn[z][d];
+}
+
+int main(void)
+{
+ for (int i=0; i<MAX; i++)
+ printf("\t%d", i);
+ putchar('\n');
+ for (int i=0; i<MAX; i++)
+ {
+ printf("%d\t", i);
+ for (int j=0; j<MAX; j++)
+ {
+ if (j >= i)
+ printf("%d", n0(i, j));
+ putchar('\t');
+ }
+ putchar('\n');
+ }
+ putchar('\n');
+
+ for (int i=0; i<MAX; i++)
+ {
+ printf("%d\t", i);
+ for (int j=0; j<MAX; j++)
+ {
+ if (j >= i && i > 0)
+ {
+ double d = (double)(n0(i-1,j)-n0(i,j))/n0(i,j);
+ printf("%5.2f", 1/d);
+ }
+ putchar('\t');
+ }
+ putchar('\n');
+ }
+
+ return 0;
+}