Evolton

九州大学 2001年度 前期日程 第2次学力試験 整数・数列文系数学 第4問(c)

mnを自然数とする.次の算法を考える.

(a) i=mj=nk=0

(b) i=1ならばAns=k+jとして終了する.

(c) iの値が奇数ならk=k+jとする.

(d) i=[i/2]

(e) j=2j

(f) (b)に戻る.

(ここで,[x]xを越えない最大の整数を表す.)

(1) m=100のとき,3周目と4周目の(b)におけるijkの値を求めよ.
たとえば1周目ではi=100j=nk=0である.

(2) 一般のmに対して,(b)におけるijkの値について
ij+kは1周目から最後まで一定であることを示せ.

(3) 一般のmに対して,Ansを求めよ.

難易度4/ 10計算量4/ 10目安15

整数数列 帰納的定義の利用、計算整理、数学的帰納法

方針

この算法は、i を半分にしながら、奇数部分に対応する jk に足していく掛け算の手順である。各周回の(b)に入った時点で ij+k を見ると、i が偶数でも奇数でも次の周回で値が変わらない。(1)は実際に周回を追い、(2)は偶奇で場合分けして不変量を証明し、(3)は終了時 i=1Ans=k+j=ij+k となることから答える。

解答

(1)

1周目の(b)では、問題文の通り (i,j,k)=(100,n,0) である。100 は偶数なので k は変わらず、i50j2n になる。したがって2周目の(b)では (i,j,k)=(50,2n,0) である。

同様に 50 も偶数なので、3周目の(b)では (i,j,k)=(25,4n,0) である。ここで 25 は奇数なので、(c)で k=0+4n=4n となる。その後 i=[25/2]=12j=8n となるから、4周目の(b)では (i,j,k)=(12,8n,4n) である。

(2)

ある周回の(b)における値を (i,j,k) とする。まず i が偶数のとき、(c)では k は変わらず、次の周回では i=i2,j=2j,k=k である。したがって ij+k=i22j+k=ij+k である。

次に i が奇数のとき、i=2h+1 とおく。(c)で kk+j となり、次の周回では i=h,j=2j,k=k+j である。したがって ij+k=h2j+k+j=(2h+1)j+k=ij+k である。

よって、どちらの場合にも次の周回で ij+k は変わらない。したがって ij+k は1周目から最後まで一定である。1周目では ij+k=mn なので、一定値は mn である。

(3)

算法が終了するのは(b)で i=1 となったときであり、そのとき Ans=k+j と定められる。ところが i=1 なので k+j=ij+k である。(2)より ij+k は常に mn に等しいから Ans=mn である。

別解

解法2

方針

m の2進表示を使う。各周回で最下位桁を読み取り、
その桁が1なら対応する 2sn を加える算法だと説明する。
実際の値と不変量も2進表示の分解から確認する。

解答

(1) 100502512と半減する。j は毎回2倍され、25だけが奇数なので、
3周目と4周目は(i,j,k)=(25,4n,0),(12,8n,4n)である。

(2)
m の2進表示をm=ε0+2ε1++2sεs,εν{0,1}とする。r 周の処理後、i は未処理の上位桁、
j=2rnk は処理済みの1の桁に対応する
ε0n++εr12r1n である。
したがって常にij+k=mn.これは偶数なら桁0を捨て、奇数ならその桁の j を先に加えることに対応する。

(3)
最後は最上位桁だけが残って i=1 となる。
そのときAns=k+j=ij+k=mn.

総評

手順をそのまま追うだけでなく、不変量 ij+k を見つけて証明する問題。難度はやや易しめ、計算量は少なく、目安時間は12〜16分。(1)では(b)に戻ってきた時点の値を答えるので、奇数判定後の k の更新と、その後の i,j の更新順を混同しないことが大切である。(2)は偶数・奇数の2場合を丁寧に書けば十分で、(3)は終了時に i=1 であることから k+j=ij+k と結ぶ。アルゴリズムの意味は掛け算だが、答案では不変量で示すのが最も確実である。

冊子PDFで見る九大の整数の問題で問題集を作る

出典: 九州大学 2001年度 前期 文系 第4問(大学公式の問題PDF)。問題文はHTML表示のために再入力・数式組版しています。