方針
この算法は、 を半分にしながら、奇数部分に対応する を に足していく掛け算の手順である。各周回の(b)に入った時点で を見ると、 が偶数でも奇数でも次の周回で値が変わらない。(1)は実際に周回を追い、(2)は偶奇で場合分けして不変量を証明し、(3)は終了時 で となることから答える。
解答
(1)
1周目の(b)では、問題文の通り である。 は偶数なので は変わらず、 は 、 は になる。したがって2周目の(b)では である。
同様に も偶数なので、3周目の(b)では である。ここで は奇数なので、(c)で となる。その後 、 となるから、4周目の(b)では である。
(2)
ある周回の(b)における値を とする。まず が偶数のとき、(c)では は変わらず、次の周回では である。したがって である。
次に が奇数のとき、 とおく。(c)で は となり、次の周回では である。したがって である。
よって、どちらの場合にも次の周回で は変わらない。したがって は1周目から最後まで一定である。1周目では なので、一定値は である。
(3)
算法が終了するのは(b)で となったときであり、そのとき と定められる。ところが なので である。(2)より は常に に等しいから である。
別解
解法2
方針
の2進表示を使う。各周回で最下位桁を読み取り、
その桁が1なら対応する を加える算法だと説明する。
実際の値と不変量も2進表示の分解から確認する。
解答
(1) と半減する。 は毎回2倍され、25だけが奇数なので、
3周目と4周目はである。
(2)
の2進表示をとする。 周の処理後、 は未処理の上位桁、
、 は処理済みの1の桁に対応する
である。
したがって常にこれは偶数なら桁0を捨て、奇数ならその桁の を先に加えることに対応する。
(3)
最後は最上位桁だけが残って となる。
そのとき
総評
手順をそのまま追うだけでなく、不変量 を見つけて証明する問題。難度はやや易しめ、計算量は少なく、目安時間は12〜16分。(1)では(b)に戻ってきた時点の値を答えるので、奇数判定後の の更新と、その後の の更新順を混同しないことが大切である。(2)は偶数・奇数の2場合を丁寧に書けば十分で、(3)は終了時に であることから と結ぶ。アルゴリズムの意味は掛け算だが、答案では不変量で示すのが最も確実である。