写在前面
最近做了一些题目, 才发现当初学习组合数学时候还是做的题太少, 很多东西只是知道其概念如何, 真正上手题目还是get不到精髓. 这次来总结一下计算不定方程解的个数的一些方法
, 加深一下对这块知识点的掌握.
问题
求解不定方程中解的个数, 这里面的不定方程指的是形如下面的方程:
x
1
+
x
2
+
⋯
+
x
n
=
k
,
x
i
∈
Z
,
(
i
=
1
,
2
,
⋯
,
n
)
.
x_1+x_2+\cdots+x_n=k, \quad x_i\in \mathbb{Z},(i=1,2,\cdots, n).
x1+x2+⋯+xn=k,xi∈Z,(i=1,2,⋯,n).
对于这样的方程, 其组合意义很容易与球盒模型进行对应, 即将
k
k
k个相同的球放入
n
n
n个不同的盒子的方法数(注意到
x
i
x_i
xi可以取负数, 所以球盒模型只能解释
x
i
x_i
xi为非负整数的情形).
我们要求上述方程中解的个数, 一个直观的思路是通过枚举来计算, 但是这不是一个一般的方法, 下面通过介绍一些简单的组合学知识来进一步分析计算不定方程解的个数.
知识点回顾
这里需要先来看看关于组合中 重集的组合
,容斥原理
的知识, 其中容斥原理是方便计算不定元范围有上界的情形.
重集的组合
N = { k 1 a 1 , k 2 a 2 , ⋯ , k n a n } , ( 有 重 数 限 制 ) M = { ∞ ⋅ a 1 , ∞ ⋅ a 2 , ⋯ , ∞ ⋅ a n } , ( 无 重 数 限 制 ) \begin{aligned} N&=\{k_1a_1,k_2a_2,\cdots,k_na_n\}, &(有重数限制)\\ M&=\{\infty\cdot a_1,\infty\cdot a_2,\cdots,\infty\cdot a_n\}, &(无重数限制)\\ \end{aligned} NM={k1a1,k2a2,⋯,knan},={∞⋅a1,∞⋅a2,⋯,∞⋅an},(有重数限制)(无重数限制)
定义: 重集 M M M的一个 k − k- k−组合 B B B, 就是一个 M [ k ] M[k] M[k]到 { a 1 , a 2 , ⋯ , a n } \{a_1,a_2,\cdots,a_n\} {a1,a2,⋯,an}的映射 B B B.
几种等价形式:
- φ : { a 1 , a 2 , ⋯ , a n } → { 0 , 1 , 2 , ⋯ } \varphi:\{a_1,a_2,\cdots,a_n\}\to\{0,1,2,\cdots\} φ:{a1,a2,⋯,an}→{0,1,2,⋯}, 且 ∑ i = 1 n φ ( a i ) = k \sum_{i=1}^n\varphi(a_i)=k ∑i=1nφ(ai)=k.这样的映射全体与 M M M 的 k − k- k−组合一一对应.
- 不定方程 x 1 + x 2 + ⋯ + x n = k x_1+x_2+\cdots+x_n=k x1+x2+⋯+xn=k其中 x i x_i xi为非负整数. 方程的解集合与重集 M M M的 k − k- k−组合一一对应.
- 球盒模型, k k k个相同的球放入 n n n个不同的盒子的不同放法数.
定理: 重集的
k
−
k-
k−组合数为
⟨
n
k
⟩
=
⟨
n
⟩
k
k
!
=
(
n
+
k
−
1
k
)
.
\left\langle\begin{matrix}n\\k \end{matrix}\right\rangle=\frac{\langle n\rangle_k}{k!}=\binom{n+k-1}{k}.
⟨nk⟩=k!⟨n⟩k=(kn+k−1).
证明: (方法一: 用递推关系证明)
设 T ( n , k ) T(n,k) T(n,k)表示不定方程 x 1 + x 2 + ⋯ + x n = k x_1+x_2+\cdots+x_n=k x1+x2+⋯+xn=k的非负整数解的个数, 则方程的解可分为两种形式:
- x 1 = 0 x_1=0 x1=0, 即 x 2 + x 3 + ⋯ + x n = k x_2+x_3+\cdots+x_n=k x2+x3+⋯+xn=k的非负整数解, 共有 T ( n − 1 , k ) T(n-1,k) T(n−1,k)个;
- x 1 ⩾ 1 x_1\geqslant1 x1⩾1, 令 x 1 ′ = x 1 − 1 ⩾ 0 x_1'=x_1-1\geqslant0 x1′=x1−1⩾0, 方程的解等价于 x 1 ′ + x 2 + ⋯ + x n = k − 1 x_1'+x_2+\cdots+x_n=k-1 x1′+x2+⋯+xn=k−1的非负整数解, 共有 T ( n , k − 1 ) T(n, k-1) T(n,k−1)个;
于是有 T ( n , k ) = T ( n − 1 , k ) + T ( n , k − 1 ) T(n,k)=T(n-1,k)+T(n, k-1) T(n,k)=T(n−1,k)+T(n,k−1).
又有初始值 T ( n , 0 ) = 1 , T ( 1 , k ) = 1 T(n,0)=1, T(1, k)=1 T(n,0)=1,T(1,k)=1(可以通过生成函数来求出 T ( n , k ) T(n,k) T(n,k)
而
⟨ n k ⟩ = ( n + k − 1 k ) , \left\langle\begin{matrix}n\\ k \end{matrix}\right\rangle=\binom{n+k-1}{k}, ⟨nk⟩=(kn+k−1),
也满足上述递推关系以及初值, 所以:⇒ T ( n , k ) = ( n − k + 1 k ) . \Rightarrow T(n,k)=\binom{n-k+1}k. ⇒T(n,k)=(kn−k+1).
方法二: 从球盒模型组合意义出发证明, k k k个相同的球放入 n n n个不同的盒子中.
n n n个盒子并排放, 共有 n − 1 n-1 n−1条公共边.
n − 1 n-1 n−1条公共边和 k k k个球共占用 n + k − 1 n+k-1 n+k−1个位置.
每一种放法对应于从 n + k − 1 n+k-1 n+k−1个位置中选 n − 1 n-1 n−1个位置作为盒子的公共边.
于是共有 ( n + k − 1 n − 1 ) = ( n + k − 1 k ) \binom{n+k-1}{n-1}=\binom{n+k-1}k (n−1n+k−1)=(kn+k−1)种方法.
方法三:(用隔板法证明)
k k k个相同的球放入 n n n个不同的盒子, 且每个盒子至少1个球(隔板问题)
即从 k k k个球中间的 k − 1 k-1 k−1个位置选择 n − 1 n-1 n−1位置中放置隔板,共有 ( k − 1 n − 1 ) \binom{k-1}{n-1} (n−1k−1)种.
对应不定方程 x 1 + x 2 + ⋯ + x n = k x_1+x_2+\cdots+x_n=k x1+x2+⋯+xn=k的正整数解的个数.
而所求为 x 1 + x 2 + ⋯ + x n = k x_1+x_2+\cdots+x_n=k x1+x2+⋯+xn=k的非负整数解的个数, 转化为正整数解,等价于
x 1 ′ + x 2 ′ + ⋯ + x n ′ = k + n ( x i ′ = x i + 1 ) x_1'+x_2'+\cdots+x_n'=k+n\quad(x_i'=x_i+1) x1′+x2′+⋯+xn′=k+n(xi′=xi+1)
的正整数解的个数: ( n + k − 1 n − 1 ) = ( n + k − 1 k ) \binom{n+k-1}{n-1}={n+k-1\choose k} (n−1n+k−1)=(kn+k−1).
容斥原理
定理(包含排除原理)
设
S
S
S为一个有限集,
P
i
(
1
≤
i
≤
m
)
P_i(1\le i\le m)
Pi(1≤i≤m)为
m
m
m个性质,
- A i = { x ∣ x ∈ S , x 具 有 性 质 P i } A_i=\{x|x\in S, x具有性质P_i\} Ai={x∣x∈S,x具有性质Pi},
- A ˉ i = { x ∣ x ∈ S , x 不 具 有 性 质 P i } \bar A_i=\{x|x\in S, x不具有性质P_i\} Aˉi={x∣x∈S,x不具有性质Pi}.
- A ˉ 1 ∩ A ˉ 2 ∩ ⋯ ∩ A ˉ m = { x ∣ x ∈ S , 且 x 不 具 有 P i 中 任 何 性 质 } \bar A_1\cap\bar A_2\cap\cdots\cap\bar A_m=\{x|x\in S, 且x不具有P_i中任何性质\} Aˉ1∩Aˉ2∩⋯∩Aˉm={x∣x∈S,且x不具有Pi中任何性质};
- A 1 ∪ A 2 ∪ ⋯ ∪ A m = { x ∣ x ∈ S , 且 x 具 有 全 部 性 质 } A_1\cup A_2\cup\cdots\cup A_m=\{x|x\in S, 且x具有全部性质\} A1∪A2∪⋯∪Am={x∣x∈S,且x具有全部性质}.
S
S
S中不具有任何性质的元素个数为
∣
A
ˉ
1
∩
A
ˉ
2
∩
⋯
∩
A
ˉ
n
∣
=
∣
S
∣
−
∑
1
⩽
i
⩽
m
∣
A
i
∣
+
∑
1
⩽
i
<
j
⩽
m
∣
A
i
∩
A
j
∣
−
∑
1
⩽
i
<
j
<
k
⩽
m
∣
A
i
∩
A
j
∩
A
k
∣
+
⋯
+
(
−
1
)
m
∣
A
1
∩
A
2
∩
⋯
∩
A
m
∣
.
\begin{aligned} |\bar A_1\cap\bar A_2\cap\cdots\cap\bar A_n|=|S|&-\sum_{1\leqslant i\leqslant m}|A_i|+\sum_{1\leqslant i<j\leqslant m}|A_i\cap A_j|\\ &-\sum_{1\leqslant i<j<k\leqslant m}|A_i\cap A_j\cap A_k|+\cdots\\ &+(-1)^m|A_1\cap A_2\cap\cdots\cap A_m|. \end{aligned}
∣Aˉ1∩Aˉ2∩⋯∩Aˉn∣=∣S∣−1⩽i⩽m∑∣Ai∣+1⩽i<j⩽m∑∣Ai∩Aj∣−1⩽i<j<k⩽m∑∣Ai∩Aj∩Ak∣+⋯+(−1)m∣A1∩A2∩⋯∩Am∣.
证明:
要证明定理成立, 只需证明 S S S中任意元素在等式两边被计算的次数相等.
x x x不具有任何性质 ( x ∉ S ) (x\notin S) (x∈/S), 则 1 = 1 − 0 + 0 ⋯ + ( − 1 ) m 0 1=1-0+0\cdots+(-1)^m0 1=1−0+0⋯+(−1)m0,成立;
y y y具有 t t t个性质, 1 ≤ t ≤ m 1\le t\le m 1≤t≤m, y ∈ S y\in S y∈S, 则
0 = 1 − ( t 1 ) + ( t 2 ) − ( t 3 ) + ⋯ + ( − 1 ) t ( t t ) = ( 1 − 1 ) t , 0=1-\binom t1+\binom t2-\binom t3+\cdots+(-1)^t\binom tt=(1-1)^t, 0=1−(1t)+(2t)−(3t)+⋯+(−1)t(tt)=(1−1)t,
显然成立. 证完.
不定元有下界的整数解个数
这类问题比较简单, 上面的重集组合部分已经讨论了, 直接代入公式就可以计算, 下面以一个例题来进行讲解.
x
1
+
x
2
+
x
3
+
x
4
=
9
x_1+x_2+x_3+x_4=9
x1+x2+x3+x4=9,其中
{
x
1
≥
1
,
x
2
≥
2
,
x
3
≥
1
,
x
4
≥
3
,
\begin{cases}x_1\geq 1,\\x_2\geq 2,\\x_3\geq 1,\\x_4\geq 3,\end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧x1≥1,x2≥2,x3≥1,x4≥3,
的整数解的个数.
令 y 1 = x 1 − 1 y_1=x_1-1 y1=x1−1, y 2 = x 2 − 2 y_2=x_2-2 y2=x2−2, y 3 = x 3 − 1 y_3=x_3-1 y3=x3−1, y 4 = x 4 − 3 y_4=x_4-3 y4=x4−3.
则上述方程等价于 y 1 + y 2 + y 3 + y 4 = 9 − 7 = 2 y_1+y_2+y_3+y_4=9-7=2 y1+y2+y3+y4=9−7=2的非负整数解的个数.
由重集 M M M的 k − k- k−组合数 ⇒ ( 4 + 2 − 1 2 ) = ( 5 2 ) = 10 \Rightarrow {4+2-1\choose 2}={5\choose2}=10 ⇒(24+2−1)=(25)=10.
不定元任意范围的整数解个数
求不定方程
x
1
+
x
2
+
x
3
=
9
,
1
≤
x
1
≤
3
,
2
≤
x
2
≤
4
,
0
≤
x
3
≤
5
,
x_1+x_2+x_3=9,\quad 1\le x_1\le3,2\le x_2\le 4,0\le x_3\le5,
x1+x2+x3=9,1≤x1≤3,2≤x2≤4,0≤x3≤5,
的整数解的个数.
解: 令 y 1 = x 1 − 1 , y 2 = x 2 − 2 , y 3 = x 3 y_1=x_1-1,y_2=x_2-2,y_3=x_3 y1=x1−1,y2=x2−2,y3=x3, 原不定方程可以等价于求解
y 1 + y 2 + y 3 = 6 , 0 ≤ y 1 ≤ 2 , 0 ≤ y 2 ≤ 2 , 0 ≤ y 3 ≤ 5 , y_1+y_2+y_3=6,\quad 0\le y_1\le2,0\le y_2\le 2,0\le y_3\le5, y1+y2+y3=6,0≤y1≤2,0≤y2≤2,0≤y3≤5,
的整数解的个数, 令 S S S为方程 y 1 + y 2 + y 3 = 6 y_1+y_2+y_3=6 y1+y2+y3=6的非负整数解, 则
∣ S ∣ = ( 3 + 6 − 1 6 ) = ( 8 6 ) = 28. |S|=\binom{3+6-1}{6}=\binom86=28. ∣S∣=(63+6−1)=(68)=28.
令 P 1 P_1 P1为性质 y 1 ≥ 3 y_1\ge 3 y1≥3, P 2 P_2 P2为性质 y 2 ≥ 3 y_2\ge3 y2≥3, P 3 P_3 P3为性质 y 3 ≥ 6 y_3\ge6 y3≥6, A i A_i Ai表示满足性质 P i P_i Pi的解构成 的集合 i = 1 , 2 , 3 i=1,2,3 i=1,2,3,
∣ A ˉ 1 ∩ A ˉ 2 ∩ A ˉ 3 ∣ = 28 − ( 3 + 3 − 1 3 ) ∗ 2 − 1 + 1 + 0 ∗ 2 − 0 = 8. |\bar A_1\cap\bar A_2\cap\bar A_3|=28-\binom{3+3-1}3*2-1+1+0*2-0=8. ∣Aˉ1∩Aˉ2∩Aˉ3∣=28−(33+3−1)∗2−1+1+0∗2−0=8.
当然, 如果不用容斥原理, 也可以通过生成函数的方法进行计算, 下面具体说说.
直接设不定方程
x 1 + x 2 + x 3 = k , x_1+x_2+x_3=k, x1+x2+x3=k,
整数解个数为 a k a_k ak, 则容易得到 a k a_k ak的生成函数为:
g ( x ) = ( x + x 2 + x 3 ) ( x 2 + x 3 + x 4 ) ( 1 + x + ⋯ + x 5 ) = x 3 ( 1 + x + x 2 ) 2 ( 1 + x + ⋯ + x 5 ) = x 12 + 3 x 11 + 6 x 10 + 8 x 9 + 9 x 8 + 9 x 7 + 8 x 6 + 6 x 5 + 3 x 4 + x 3 \begin{aligned} g(x) &=(x+x^2+x^3)(x^2+x^3+x^4)(1+x+\cdots+x^5)\\ &=x^3(1+x+x^2)^2(1+x+\cdots+x^5)\\ &=x^{12}+3 x^{11}+6 x^{10}+8 x^9+9 x^8+9 x^7+8 x^6+6 x^5+3 x^4+x^3 \end{aligned} g(x)=(x+x2+x3)(x2+x3+x4)(1+x+⋯+x5)=x3(1+x+x2)2(1+x+⋯+x5)=x12+3x11+6x10+8x9+9x8+9x7+8x6+6x5+3x4+x3
于是直接得到 a 9 = 8 a_9=8 a9=8.