中国の剰余定理をPythonで計算する

5で割ると4余り、7で割ると5余る整数を考えます。この整数を5 と7の積である35で割った時の余りはいくつか?という問題があります。この場合中国の剰余定理を使うと計算することができます。

import sympy.ntheory.modular 
modulo    = [5, 7] 
remainder = [4, 5] 
crt_m_r = sympy.ntheory.modular.crt(modulo, remainder)  
crt_m_r
(mpz(19), 35)

この結果は、19というのは次のように上記の要件を満たす数字で一番小さいものを示しています。。

19÷5=3 余り 4
19÷7=3 余り 5

となるので、問題の要件を満たしています。そして19、54、89、124と19から35毎に条件を満たす数字があらわれます。この19という整数は、上記の数字を35で割った時の余りになります。

この定理を中国の剰余定理といいます。発見したのは中国の南北朝時代、孫子という人ですが、兵法の孫子とは別人のようです。孫子の定理(Sunzi’s theorem)といわれることもあるようですが、関数名はChinese remainder theoremの略でcrtとなっています。たいていの定理は発見した人の名前がついているのに少し腑に落ちないものがあります。

この記事を書いた人

目次
閉じる