問題概略
次の条件をみたす整数の個数を求めてください。
- 10000 以上 99999 以下
- 各位の数の和は 4 以下
解説の pdf も作りました。きれいなレイアウトで読みたい方はこちらをどうぞ。
全部書く(解法1)
この問題は全部書くのが手っ取り早いと思います。 の形の数を考えます。
和が 1 のときは 10000 のみの 1 個。
和が 2 のときは と 20000 が条件をみたします。この形の数は 個。
和が 3 のときは , , 30000 が条件をみたします。
のときは「1 つの に 2 を入れる」と「2 つの に 1 を入れる」の 2 つの場合があります。これは 個。
の形の数は 4 個で,全部で 個。
和が 4 のときは , , , 40000 が条件をみたします。
のときは「1 つの に 3 を入れる」「2 つの に 1 と 2 を入れる」「3 つの に 1 を入れる」の 3 つの場合があって 個。
のときは「1 つの に 2 を入れる」と「2 つの に 1 を入れる」の 2 つの場合があります。これは 個。
和が 4 のときは全部で 個。
以上の和をとると になるので,求める個数は「56 個」です。
二項係数であらわす(解法2)
首位の数字を固定
首位の数字を と固定して,残りの桁数字の組を考えます。
条件は です。 とおきます。
これをみたす ~(すべて 0 以上)の組は 個のボールと 4 個の仕切りの順列と同じ数だけあります。
についての和をとったものが答えです。
\begin{align*}
\sum_{k=1}^4 {}_{8-k}\mathrm{C}_4 &=
{}_{7}\mathrm{C}_4+{}_{6}\mathrm{C}_4+{}_{5}\mathrm{C}_4+{}_{4}\mathrm{C}_4\\
&=35+15+5+1=56\mbox{ ……$\spadesuit$}
\end{align*}
公式を使って改善
では二項係数の左側の添字が変化するときの和を求めました。この計算では次の公式が使えます。
右辺は「1~ から 個の整数を選ぶときの場合の数」です。
左辺ではこの場合の数を「最大値が ~ のどれか」で場合分けして求めています。たとえば最大値が のとき,残り 個の数は 1~ から選ぶわけですね。
公式の説明が終わったところで,もとの問題に戻りましょう。 の計算は次のようになります。
\begin{align*}
\sum_{k=1}^4 {}_{8-k}\mathrm{C}_4 &=\sum_{l=4}^7 {}_{l}\mathrm{C}_4\quad (8-k=l)\\
&={}_{8}\mathrm{C}_5={}_{8}\mathrm{C}_3=56
\end{align*}
一般化
同じように考えると,もとの問題を一般化した問題も解けます。
「 桁の整数で桁数字の和が のものの個数を求めよ」を考えます。
桁数字を首位から順に ~ とします。
まず で を固定します。
とおきます。
~ と はすべて 0 以上なので,これをみたす ~ と の組は 個のボールと 個の仕切りの順列と同じだけあります。
について和をとって,公式を使います。
\begin{align*}
\sum_{a_1=1}^k {}_{n+k-a_1-1}\mathrm{C}_{n-1}
&=\sum_{l=n-1}^{n+k-2} {}_{l}\mathrm{C}_{n-1} \quad (l=n+k-a_1-1) \\
&={}_{n+k-1}\mathrm{C}_{n}
\end{align*}
一般化した問題の答えは「 個」です。
漸化式(解法3)
右に1桁足して立式
桁の数で桁数字の和が のものが 個あるとして漸化式を立てます。
いま考えている問題では は 1 以上 4 以下なので初期条件は次のようになります。
\begin{align*}dp(1,\, k)=\begin{cases}
1 & (1\leqq k\leqq 4)\\[3pt]
0 & (\text{上記以外})
\end{cases}\end{align*}
桁で桁数字の和が のとき右に を書き足すと 桁で桁数字の和が の数ができます。
\begin{align*}
dp(n,\, k) &=dp(n-1,\, 1)+dp(n-1,\, 2)+\cdots+dp(n-1,\, k)\\
&=\sum_{l=1}^k dp(n-1,\, l)
\end{align*}
式で書くと難しそうですが,表を書くと簡単です。
1 行目は なので 1 を 4 つ書きます。
2 行目以降は「1 行上を見て,左端から自分の真上までの数の和を書きこむ」の繰り返しです。
要するに累積和を繰り返し求めることで表が完成します。
行列で書いて一般項を求める
漸化式を行列で書くと次のようになります。
\begin{align*}
\begin{pmatrix}
dp(n+1,1)\\dp(n+1,2)\\dp(n+1,3)\\dp(n+1,4)
\end{pmatrix}
=\begin{pmatrix}
1&0&0&0\\1&1&0&0\\1&1&1&0\\1&1&1&1
\end{pmatrix}
\begin{pmatrix}
dp(n,1)\\dp(n,2)\\dp(n,3)\\dp(n,4)
\end{pmatrix}
\end{align*}
この下三角行列の 乗は簡単に求められるので の一般項が求められます。
\begin{align*}
\begin{pmatrix}
dp(n,1)\\dp(n,2)\\dp(n,3)\\dp(n,4)
\end{pmatrix}
&=\begin{pmatrix}
1&0&0&0\\1&1&0&0\\1&1&1&0\\1&1&1&1
\end{pmatrix}^{n-1}
\begin{pmatrix}
1\\1\\1\\1
\end{pmatrix}\\
&=\begin{pmatrix}
1&0&0&0\\n-1&1&0&0\\\frac{1}{2}n(n-1)&n-1&1&0\\\frac{1}{6}(n+1)n(n-1)&\frac{1}{2}n(n-1)&n-1&1
\end{pmatrix}
\begin{pmatrix}
1\\1\\1\\1
\end{pmatrix}\\
&=\begin{pmatrix}
1\\n\\ \frac{1}{2}n(n+1) \\ \frac{1}{6}n(n+1)(n+2)
\end{pmatrix}
\end{align*}
これの和が「 桁で桁数字の和が の数の個数」です。
前に求めた で とおいたものと一致します。