コメント(3)
ラテくん
2025/11/27 22:35
任意の素数 \( p \) と二項係数 \( \binom{m}{k} \) に対して、\( p > m \) の場合に \( \binom{m}{k} \) を \( p \) で割った余りを効率良く求めるための方法は、Lucasの定理を利用することです。
### Lucasの定理
Lucasの定理によると、素数 \( p \) に対する二項係数の計算は、次のように表されます。
\[
\binom{m}{k} \equiv \prod_{i=0}^{t} \binom{m_i}{k_i} \mod p
\]
ここで、\( m \) を \( p \) 進法で展開したときの各桁を \( m_i \)、\( k \) を同様に展開した各桁を \( k_i \) とします。すなわち、\( m = m_0 + m_1 p + m_2 p^2 + \ldots \) および \( k = k_0 + k_1 p + k_2 p^2 + \ldots \) です。\( \binom{m_i}{k_i} \) は \( m_i < k_i \) のときは \( 0 \) となります。
### アルゴリズム
1. **数の変換**: \( m \) と \( k \) を素数 \( p \) に基づく桁ごとの表現に変換します。
2. **条件チェック**: 各桁 \( i \) について \( m_i \) と \( k_i \) を比較します。もし \( m_i < k_i \) なら、結果は \( 0 \) です。
3. **二項係数の計算**: それ以外の場合、各桁について \( \binom{m_i}{k_i} \) を計算し、それらの積を求めます。
4. **結果の導出**: 最後に、得られた積を \( p \) で割った余りを計算します。
### 具体的な手順
なまず「暇」
2025/11/27 22:37
頭いいだと?!
れんれん
2025/11/27 22:38
それな
