数学のことはよくわからないのでところどころ端折っている。あと結局間違ってる可能性も・・・。
とりあえず、こんなことできる方法がある!程度のメモ書き。
たとえば
という数を323で割ったあまりを求めたいとき。
暗算でも手計算でも電卓でもパソコンでも何でもいいけど使って求められるだろうか?
僕は初見ではどれも不可能だった。
暗算なんて
くらいまでしかできないw手計算したけど
で紙を破いた。電卓は簿記で使ってものを用いたが桁が余裕で足りない。パソコンはC言語で素直に計算させたら桁が足りなかった。各桁用の配列を作ればたぶん簡単だと思うけど。とりあえず
・・・どうしたものか。
離散数学の授業でこんな問題を解決してくれる方法を習ったのを思い出した。
それが中国人の剰余定理。
特にちゃんと理解はしてないけれど過程をざっくりメモっとく。
「中国人の剰余定理」
→323を素因数分解する。
17, 19を約数に持つ(この2つの数は素数で、323は1とこの2つの素数しか約数に持たない)、より
→
→
の2つに分解できる。
ここでラグランジュの定理を用いる。
ということで
(なんで「≡」合同記号なのかは分からない^^;)
で、
をこの2つを使って表現していく。
mod 19のとき。
※
は1だから
は
と同じ。
(補足)--------
--------------
112をさらに19で割る→余り17
同様にmod 17でもやる。
(補足)--------
--------------
※32はまだ17で割れるから、割った余りは15
ここで
を満たすXが存在する。
a = 17, b = 15 とおく。
19と17の最小公約数は1
ここで
とする。
拡張ユークッリッド互除法を使う。
よって
よって
ここでS_1とS_2を以下のように設定する。
(↑
とするので各値を代入すると
つまり
「321」