過去問解きまくり研究所 ホーム

平成27年度 秋期 午前 問6

アルゴリズム

ユークリッドの互除法に関する問題

次に示すユークリッドの互除法(方法 1,方法 2)で,正の整数 a,b の最大公約数は,それぞれ m と n のどちらの変数に求まるか。ここで,m mod n は,m を n で割った余りを表す。

〔流れ図〕

方法 1                          方法 2
  開始                            開始
  a → m / b → n                  a → m / b → n
  m mod n → r                     ループ 2 の上端(条件の記載なし)
  ループ 1 の上端  r = 0            m mod n → r
    n → m                           n → m
    r → n                           r → n
    m mod n → r                   ループ 2 の下端  r = 0
  ループ 1 の下端                   終了
  終了
方法 1方法 2
アmm
イmn
ウnm
エnn
答えと解説を見る

✓ これが正解ウn m

解説

抜ける位置が一手ずれるので、答えの残る変数が変わります。

二つの手順はどちらもユークリッドの互除法ですが、流れ図の上で繰返しを抜ける判定を置く位置が違います。同じ数で手を動かすと差がはっきりします。a を 8、b を 6 とすると最大公約数は 2 です。方法 1 は繰返しに入る前に余りを求めるので、8 を 6 で割った余り 2 を得て中へ入り、n の値を m へ、余りを n へ移してから、6 を 2 で割った余り 0 を求めます。ここで判定に当たって抜けるため、m は 6、n は 2 のまま残り、答えは n の側にあります。方法 2 は先に繰返しへ入り、終わりで判定します。余りが 0 になった回もそのまま移す処理を通るので、答えが m へ送られ、n には 0 が残ります。前判定と後判定では、抜けた後の変数の中身が一手ぶんずれるというのが、この設問の軸です。a を 12、b を 18 と入れ替えても、置き場所の結論は変わりません。

ほかの選択肢はなぜ違うのか

出典:平成27年度 秋期 応用情報技術者試験 午前 問6

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)