マナビング基本情報技術者

ユークリッドの互除法で比較回数はどう数える?

基本情報技術者試験 平成31年度春期 午前 問7 / アルゴリズムとプログラミング › アルゴリズム

過去問にチャレンジ

平成31年度春期 午前 問7

次の流れ図は,2数 A,B の最大公約数を求めるユークリッドの互除法を,引き算の繰返しによって計算するものである。Aが876,Bが204のとき,何回の比較で処理は終了するか。

平成31年度春期 午前 問7の図
  1. ア

    4

  2. イ

    9

  3. ウ

    10

  4. エ

    11

会話形式の解説

講師講師
この流れ図では、引き算の回数と「L:S」で比較する回数を分けて数えることが大切です。
受験者受験者
Lが876、Sが204から始まります。まずLから204を繰り返し引くのですね。
講師講師
はい。4回引くとLは60、Sは204になります。4回目の比較は引き算の前なので、まだ終了しません。
受験者受験者
4回という答えでは、最初の引き算の区切りまでしか数えていませんね。その後はSの方が大きいです。
講師講師
Sから60を3回引くとSは24です。続いてLから24を2回引くと、Lは12、Sは24になります。
受験者受験者
9回目の比較では、まだLが36、Sが24ですね。ここでも等しくありません。
講師講師
そのとおりです。比較後にLから24を引き、10回目の比較ではLが12、Sが24です。
受験者受験者
10回目の比較でも終わらず、その後にSから12を引いて両方が12になります。
講師講師
はい。ここまでの引き算は合計10回です。両方が12になったことを流れ図が確かめるには、比較にもう一度戻ります。
受験者受験者
つまり、10回という答えは引き算を数えたものです。最後に等しいと判定する比較を加えて、11回ですね。
講師講師
正解です。「L:S」では大小に加えて等しいかも調べます。回数を問われたら、どの処理を数えるのか確認しましょう。

まとめ

L=876、S=204から始め、大きい方から小さい方を引いて比較に戻ります。Lから4回、Sから3回、Lから2回、Sから1回の計10回引くと、両方が12になります。その後、等しいことを確かめる比較がもう1回あるため、比較は計11回です。

解答・解説

正解はエです

この問題のテーマ

引き算で行うユークリッドの互除法について、流れ図の比較が終了までに何回行われるかを問う問題です。

解き方の考え方

初期値は L=876、S=204です。図では L と S を比較し、大きい方から小さい方を引いて比較に戻ります。L から4回、S から3回、L から2回、S から1回引くと、両方が12になります。引き算は計10回ですが、終了を決める等値判定も比較に含めます。

選択肢ごとの解説

  1. ×ア  4
    4回目の比較では L=264、S=204なので、比較後に L から204を引きます。この時点では L=60、S=204で等しくなく、処理は続きます。
  2. ×イ  9
    9回目の比較では L=36、S=24です。両者は異なるため、まだ終了しません。
  3. ×ウ  10
    10回目の比較では L=12、S=24です。この比較の後に S から L を引いて両方が12になりますが、その一致を確認するためにもう一度比較します。
  4. ○エ  11
    10回の引き算を終えた後、L=S=12を判定します。この最後の判定が11回目の比較なので、エの11回が正解です。

POINT

  • 図の「L:S」は、大小だけでなく等しいかどうかも調べます。
  • L と S が異なる比較の後には、どちらか一方から他方を1回引きます。
  • 回数を数えるときは、引き算の回数と比較の回数を区別します。

※出典:平成31年度春期 基本情報技術者試験 午前 問7(一部改変)