中国剰余定理 (ABC193-E Oversleeping)
ABC193のE問題は連立合同式についての問題でした。これは中国式剰余定理によって解を求めるものです。他にも拡張Eulerの定理についての証明においても中国式剰余定理は登場します。
名前と背景
この定理は中国剰余定理、中国の剰余定理の他、孫子*1の定理とも呼ばれることがあります。
孫子の定理という名前は南北朝時代の算術書『孫子算経』の下巻問28に由来します*2。
今有物、不知其數。三三數之賸二。五五數之賸三。七七數之賸二。問物幾何。
答曰、二十三。
術曰、三三数之賸二、置一百四十。五五数之賸三、置六十三。七七数之賸二、置三十。幷之、得二百三十三。以二百一十減之、即得。凡三三数之賸一、則置七十。五五数之賸一、則置二十一。七七数之賸一、則置十五。一百六以上、以一百五減之、即得。
これを現代風の書き方に改めると次のようになります。
定理の主張
中国剰余定理とは次のような定理です。
がどの2つをとっても互いに素であるとき、連立合同式
を満たすような整数 が を法として唯1つ存在する。
また、この定理は法が互いに素でない場合に一般化することができます。
任意の について が成立することと
連立合同式
を満たすような整数 が を法として唯1つ存在することは同値である。
証明(互いに素、二元のとき)
解が存在することとその一意性を証明します。
証明(互いに素、$k$ 元のとき)
数学的帰納法によって示します。
一元の時は自明に成立します。
元の時に成立すると仮定し、 元の時について考えます。
この時 の解で を満たすものを とすると
は
よって数学的帰納法により題意が示されました。
証明(一般、二元のとき)
まずは「解が唯1つ存在する 」について証明します。
連立合同式の解 について
であり、 は の倍数であるため が成立します。
同様にして が成立するため となります。
次に逆の「 解が唯1つ存在する」について証明します。
これも互いに素な場合と同様に存在性と一意性に分けて証明します。
解の存在
Bézoutの補題により
を満たす整数 が存在します。 より は の倍数であり、 も整数で、 を満たします。
ここで とすると
証明(一般、$k$ 元のとき)
互いに素なときとほとんど同じで総積となっているところを最小公倍数に変えればそのまま証明できます。
解の構築
条件を満たせば解が存在することが分かりました。では実際に解はどういう風に求めればいいでしょうか?
実は二元の解の存在についての証明にある構成方法で解を求めることができます。
元の場合は数学的帰納法のように 元の結果と 個目の合同式について同じ方法を用いればいいでしょう。
拡張Εὐκλείδηςの互除法は であるため、 で解が求まりました。
但し、計算途中のオーバーフローに注意しましょう。このとき を計算するときは を で をとるとオーバーフローが起きにくくなります。このとき とすると$$ \begin{align}
n_1\displaystyle \left(x_1 \bmod \frac{n_2}{\gcd(n_1,\,n_2)}\right) + a_1 &= n_1\beta + a_1\\
&= a_2 - n_2x_2 -\displaystyle \frac{n_1n_2}{\gcd(n_1,\,n_2)}\alpha
\end{align} $$ とちゃんと各条件を満たしていることが分かります。