条件を満たす整数の選び方について

組合せ論 4/N

公開日: 2021-04-06
更新日: 2023-12-16

  Table of Contents

差が2以上の整数の選び方

Problem

18以下の正の整数から, どの2つの差も2以上であるような5個の整数を選び出す方法は何通りあるか? ただし, 順番を変えただけの選び出し方は同一のものと考える


解答

問題の条件を満たすような選び出し方$a_1< a_2 < a_3 < a_4 < a_5$が与えられたとする. このとき,

\[(b_1, b_2, b_3, b_4, b_5) = (a_1, a_2-1, a_3-2, a_4-3, a_5-4)\]

とすると相異なる14以下の整数$b_1< b_2 < b_3 < b_4 < b_5$が得られる. 逆に相異なる14以下の整数$b_1< b_2 < b_3 < b_4 < b_5$が与えられるとすると, その組み合わせは $(a_1, a_2, a_3, a_4, a_5)$と1対1に対応する.

従って,

\[_{14}\text{C}_5 = 2002\text{通り}\]

差が5の場合

Problem

50以下の正の整数から, どの2つの差も5以上であるような5個の整数を選び出す方法は何通りあるか? ただし, 順番を変えただけの選び出し方は同一のものと考える


解答

問題の条件を満たすような選び出し方$a_1< aa_2\equiv a_6 \bmod 3_2 < a_3 < a_4 < a_5$が与えられたとする. このとき,

\[\text{C} (b_1, b_2, b_3, b_4, b_5) = (a_1, a_2-4, a_3-8, a_4-12, a_5-16)\]

とすると相異なる36以下の整数$b_1< b_2 < b_3 < b_4 < b_5$が得られる. 逆に相異なる36以下の整数$b_1< b_2 < b_3 < b_4 < b_5$が与えられるとすると, その組み合わせは $(a_1, a_2, a_3, a_4, a_5)$と1対1に対応する.

従って,

\[_{36}\text{C}_5 = 278256\text{通り}\]

実際にPythonで確かめても同様の答えが確認できました

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from itertools import combinations

def choose_numbers(n, k=5):
    return combinations(range(1, n+1), k)

def check_diff(Array, thresh=2):
    i = 1
    while i < len(Array):
        diff = Array[i] - Array[i-1]
        if diff < thresh:
            return False
        i += 1
    return True

def count_groups(n, k, thresh):
    return sum((map(lambda x: check_diff(x, thresh), choose_numbers(n, k))))

count_groups(50, 5, 5)
>>> 278256

また, この問題より満たすべき差が$m$のとき

\[(b_1, b_2, b_3, b_4, b_5) = (a_1, a_2-(m-1), a_3-2(m-1), a_4-3(m-1), a_5-4(m-1))\]

になることがわかります. $N$以下の正の整数という問題が与えられたら求めるべき答えは $_{N- 4(m-1)}\text{C}_5$ 通りとなります.

AIME 1998: 合計が98となる4つの正の奇数の組

Problem

\[x_1 + x_2 + x_3 + x_4 = 98\]

を満たす正の奇数の組はいくつあるか?


解法

$x_i$を$2y_i - 1$ ( ただし, $y_i$は正の整数)と置き換えると

\[\begin{align*} 98 = \sum_{i=1}^4(2y_i - 1) \end{align*}\]

従って,

\[51 = \sum_{i=1}^4 y_i \ \ \text{where } y_i > 0\]

を満たす組を見つければ良い. 従って, $_{50}\text{C}_3 = 19600$通り.

ARML 1999: 連続する4つ要素の合計が3で割り切れる並べ方

Problem

\[21, 31, 41, 51, 61, 71 ,81\]

を1列にならべ, どの連続する4つの数を取り出してもその和が3で割り切れるようにしたい. そのような並べ方は何通りあるか?


解答

${21, 31, 41, 51, 61, 71 ,81}$について$\bmod 3$をとると

\(0, 1, 2, 0, 1, 2, 0\)a_2\equiv a_6 \bmod 3

となる.

条件を満たす並べ方, $a_1, a_2, a_3, a_4, a_5, a_6, a_7$としたとき

\[\begin{align*} 0 &\equiv (a_1 + a_2 + a_3 + a_4) + (a_4 + a_5 + a_6 + a_7)\\ &\equiv (a_1 + a_2 + a_3 + a_4 + a_5 + a_6 + a_7) + a_4\\ &\equiv a_4 \bmod 3 \end{align*}\]

となるので

\[\begin{align*} 0 &\equiv a_4 \bmod 3\\ 0 &\equiv (a_1 + a_2 + a_3) \bmod 3\\ \Rightarrow & (a_1, a_2, a_3)\text{は}0,1,2\text{の並べ替え} \end{align*}\]

また,

\[\begin{align*} &(a_1 + a_2 + a_3 + a_4) \equiv (a_2 + a_3 + a_4 + a_5) \bmod 3\\ &\Rightarrow a_1 \equiv a_5 \bmod 3 \end{align*}\]

同様にのやり方で, $a_2\equiv a_6 \bmod 3, a_3\equiv a_7 \bmod 3$を得るので

並び方は

\[3!\times 3! \times 2! \times 2! = 144\text{通り}\]


Share Buttons
Share on:

Feature Tags
Leave a Comment
(注意:GitHub Accountが必要となります)