さわれる実験室 メニュー

油分け算

2 つの容器で、決まった量をはかり取れるか。作れるなら、最短で何手か。

解説

考え方

A L と B L の容器を使い、T L をはかる。使える操作は、満たす、空にする、一方から他方へ注ぐ、の 3 つ。注ぐときは、注ぐ側が空になるか、受ける側が満杯になるところで止める。

なぜそうなるか

どの操作のあとも、容器の中の量は A と B の整数倍の和で表される。だから A と B の最大公約数 g の倍数しか作れない。逆に g の倍数は A と B の整数倍の和で表せる(ベズーの等式)。T が g の倍数で、大きいほうの容器に入る(T ≤ max(A, B))なら、はかり取れる。

補足

このツールは、2 つの容器の量の組を状態として、手数の少ない順に調べ、最短の手順を求めている。

容器が 3 つの例では、8 L・5 L・3 L の容器で、満杯の 8 L を 4 L ずつに分ける問題が有名。7 回注げば分けられる。

参考(Wikipedia)