32ビットのビット列は全部で 2^32 通り
あるビット列が与えられたとき、このビット列と26ビットだけ一致する (他の6ビットは一致しない) ビット列は 32C26 通り
※ nCr は 組合せ を表す。
よって、32C26 / 2^32 = 32C6 / 2^32 = 906192 / 4294967296 = 0.00021... = 0.02%
実際、プログラムでシミュレーションすると、計算と同じ結果になります。
python
1import numpy as np
2
3length = 32
4match_length = 26
5N = 1000000
6
7# 長さ length のビット列を N 個ランダムに生成
8xs = np.random.randint(0, 2, size=(N, length))
9# 長さ length のビット列を1つランダムに生成
10y = np.random.randint(0, 2, length)
11
12# 1. (xs == y).sum(axis=1) で一致している要素数カウント
13# 2. 一致しているビット数が match_length の数をカウント
14# 3. N で割ってその割合を算出
15prob = np.sum((xs == y).sum(axis=1) == match_length) / N
16print(f"{prob:.2%}") # 0.02%