卷积(用母函数理解)
设置(1+x)^k*(1+x)^(n-k)=(1+x)^n
考察当k一定的时候,对于特定系数s,有:
C(k,0)*C(n-k,s-0)+C(k,1)*C(n-k,s-1)+...+C(k,s)*C(n-k,0)=C(n,s)
上面要注意如果s>k 的话,只需要求到C(k,k)就行了,上面的是在讨论s<k的情况。
下面写程序来证明:
n=20
(setq globaln 20)
(setq k 10)
(setq s 8)
(defun pow (num count)
(if (or (> count 1) (eq count 1) )
(* num
(pow num
(- count 1) ) )
1))
(defun slayer ( count)
(if (or (> count 1) (eq count 1) )
(* count
(slayer
(- count 1) ) )
1))
(defun slayerex (num count)
(if (or (> count 1) (eq count 1) )
(* num
(slayerex
(- num 1)
(- count 1) ) )
1))
(defun com (num count)
(/ (slayerex num
count)
(slayer count)))
(defun expr (k label temps)
(if (and (or (> k label)
(eq k label))
(or (> temps label)
(eq temps label)))
(+ (expr k
(1+ label)
temps)
(* (com k
label)
(com (- globaln
k)
(- temps
label))))
0))
(defun formula (temps)
(com globaln
temps))
(defun test (temps)
(if (< temps k)
(progn
(print (expr k 0 temps))
(print 'compare)
(print (formula temps))
(test (+ temps 1)))
(print 'over)))
[37]> (test 0)
1
COMPARE
1
20
COMPARE
20
190
COMPARE
190
1140
COMPARE
1140
4845
COMPARE
4845
15504
COMPARE
15504
38760
COMPARE
38760
77520
COMPARE
77520
125970
COMPARE
125970
167960
COMPARE
167960
OVER
OVER
注意这里考察的是在temps<k的基础上得出的结论。