Latteアプリで見る Latteアプリのダウンロード
<「【公式】Latte初心者の雑談【総合】」トップに戻る
「れんれん」のユーザーアイコン

れんれん

2025/11/27 22:35

任意の素数pと二項係数mCk(但しp>m)に対して、mCkをpで割った余りを効率良く求める定理、或いはアルゴリズムを見つけよ。

😭
1

コメント(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

それな

メッセージを入力…

アプリからのみです

送る