百五減算

百五減算(ひゃくごげんざん)は、未知の数(厳密には 0 ~ 104 の整数)を 3, 5, 7 でそれぞれ割った余りから元の数を求める和算の一つ。 3 で割った余りには 70、5 で割った余りには 21、7 で割った余りには 15 をかけた合計から 105 未満になるまで繰り返し 105 を引く(つまり 105 で割った余りを求める)もの。

以下に百五減算を利用して相手の年齢を当てるゲームを示す。これは百五減算を利用した遊びとして典型的なものである。

「あなたの年齢を 3 で割った余りを教えて下さい」と聞いて、例えば「 1 です」という答えを得る。同様に 5 と 7 で割った余りも尋ねてそれぞれ 4 , 5 であると教えてもらったとする。

そこで素早く 1 × 70 + 4 × 21 + 5 × 15 = 229 を計算し、229から105を引けるだけ引いていくと 229 - 105 = 124 , 124 - 105 = 19 となり、余りを聞いただけで「あなたの年齢は 19 歳ですね」と言い当てられるというわけである。

もちろんこの計算だけでは124歳や229歳である可能性もあるのだが、19歳か124歳かは相手を見ればすぐにわかるので、人間の年齢を当てるには十分である。

背景

より[1]

一般解

3で割った余りをa、5で割った余りをb、7で割った余りをcとするとき、解xは、合同式を用いて

    x ≡ 70a + 21b + 15c (mod 105)

と表される。 解から105を引いた数もまた解になるので、70から105を引いて 70 - 105 = -35 として、別解

    x ≡ -35a + 21b + 15c (mod 105)

を得る。

なお、余りを知る数が3、5、7でなくても、どの2つをとっても互いに素となるような数の組み合わせであれば、中国剰余定理によりこのような合同式を導くことができる[1]

原文

吉田 1977から問題と回答の原文を引用する。

問題

第十三 百五げんといふ事

ばかりをきゝてかづを云事なり。まづ七づゝひく時、二つ残ると云。又五つひく時、一つ残ると云。又三づゝ引時、二つ残ると云時に、此ばかりをききて惣数を知る。

回答

惣数八十六あるといふなり。

 まづ七づゝ引時の半一つを、十五づゝのさん用にいれ、三十とおき、又五づゝ引時の半一つを、二十一と入ておく。又三づゝの時のを、一つを七十づゝのさん用にして百四十と入て、三口あはせて百九十一有時、百にあまる時には百五はらい、のこり八十六あるといふなり。

脚注

  1. ^ a b 奥村晴彦『C言語による最新アルゴリズム事典』技術評論社、1991年、226頁。ISBN 4-87408-414-1 

参考文献

関連

外部リンク