2014年5月17日土曜日

中国人の剰余定理

備忘録。


数学のことはよくわからないのでところどころ端折っている。あと結局間違ってる可能性も・・・。

とりあえず、こんなことできる方法がある!程度のメモ書き。






たとえばという数を323で割ったあまりを求めたいとき。

暗算でも手計算でも電卓でもパソコンでも何でもいいけど使って求められるだろうか?

僕は初見ではどれも不可能だった。

暗算なんてくらいまでしかできないw手計算したけどで紙を破いた。電卓は簿記で使ってものを用いたが桁が余裕で足りない。パソコンはC言語で素直に計算させたら桁が足りなかった。各桁用の配列を作ればたぶん簡単だと思うけど。とりあえず


・・・どうしたものか。


離散数学の授業でこんな問題を解決してくれる方法を習ったのを思い出した。

それが中国人の剰余定理。

特にちゃんと理解はしてないけれど過程をざっくりメモっとく。

「中国人の剰余定理」

 (23の95乗を323で割った余り)

→323を素因数分解する。 

17, 19を約数に持つ(この2つの数は素数で、323は1とこの2つの素数しか約数に持たない)、より

 は


の2つに分解できる。

ここでラグランジュの定理を用いる。

ラグランジュの定理はここでは(nは0を含む自然数)を19, 17で割った余り=1となる形を見つけるってこと。

ということで

 (23^9を19で割った余りは1)
 (23^17を17で割った余りは1)

(なんで「≡」合同記号なのかは分からない^^;)

で、をこの2つを使って表現していく。



mod 19のとき。



は1だからと同じ。








(補足)--------





 さらに19で割ると余りは 

--------------








112をさらに19で割る→余り17





同様にmod 17でもやる。



(補足)--------



--------------







※32はまだ17で割れるから、割った余りは15




ここで



を満たすXが存在する。

a = 17, b = 15 とおく。


19と17の最小公約数は1

ここで

 (後でS_1とS_2のところで使う)

とする。

拡張ユークッリッド互除法を使う。


    ・・・19÷17=1 余り2

          ・・・17÷2=8 余り1

     ・・・2÷1=2 余り0

よって













よって



ここでS_1とS_2を以下のように設定する。



(↑  を代入した。)








とするので各値を代入すると





つまり

 ・・・23の95乗を323で割った余りは


「321」