方針
が各周回の(b)で不変であることを示す。 が偶数なら半分にした と2倍した の積は変わらず、 が奇数なら先に に を足すことで失われる1個分を補っている。(4)は を何回半分にすると1になるかを、 まで下がる段階と、その後 になる段階に分けて数える。
解答
(1)
1周目の(b)では である。 は偶数なので、次の周回では となる。さらに も偶数なので、3周目の(b)では である。ここで は奇数なので、(c)で となり、その後 、 となる。したがって4周目の(b)では である。
(2)
ある周回の(b)での値を とする。 が偶数のときは、次の周回で となるから である。 が奇数のときは とおける。(c)で は となり、その後 となる。したがって である。
よって、どちらの場合も は次の周回で変わらない。1周目では だから、最後まで一定値は である。
(3)
終了時は(b)で となっており、 と定められる。このとき である。(2)より だから である。
(4) から始める。 が偶数である間は、(d)を1回行うごとに は半分になる。したがって(d)を 回行うと となる。次に は奇数なので、(c)を行った後、(d)で となる。この次に(b)へ戻ると終了する。
したがって(d)を実行する回数は である。
別解
解法2
方針
算法を2進法の筆算とみなす。 の最下位桁を1周ごとに読み、
その桁が1なら現在の を へ加える。
終了回数も2進表示の桁移動として数える。
解答
(1)
半減列は 、 は
である。25が奇数のときだけ を加えるのでとなる。
(2) とする。 回処理した時点でしたがってで、全周回を通じて一定である。
(3)
終了時は だから(4)
は 回の右桁移動で3になり、
さらに1回で になる。したがって(d)の実行回数は回である。
総評
アルゴリズムを不変量で解析する問題。難度は標準、計算量は少なめで、目安時間は14〜18分。 が一定であることは、偶数の場合と奇数の場合をそれぞれ1行ずつ計算すれば示せる。(1)では「何周目の(b)における値」なので、(c)(d)(e)を終えて戻ってきた値を答える点に注意する。(4)は になった時点で次の(b)で終了するため、最後に余計な半減を数えないことが大切である。