基本情報技術者試験のサンプル問題(科目B)を解いてみよう。
今回のテーマは、「最大公約数を求める」である。

正解:エ
ユークリッドの互除法(二つの正の整数の最大公約数を繰り返し引き算する古典的アルゴリズム)を疑似コードで実装する問題である。
問題文を確認しよう
- 関数
gcd(num1, num2)は、x ← num1、y ← num2とする。 - その後、(a)〜(c) の穴埋めを含む処理があり、最終的に
return xとなっている。 - 問題文で示された最大公約数の性質は以下の通りである。
num1 == num2のとき、最大公約数はその値。num1 > num2のとき、gcd(num1-num2, num2)と同じ。num2 > num1のとき、gcd(num1, num2-num1)と同じ。
(a) はループ条件
- 性質(1) より、「
xとyが等しくなるまで繰り返す」必要がある。 - したがって
(a)には 繰り返し処理が必須となる。 →while (x ≠ y)が選ばれるべき。
(b) は比較条件
- 性質(2) と (3) に従い、
x > yのときx ← x - y(num1 > num2)x < yのときy ← y - x(num1 < num2)
- よって
(b)はx > yが正しい。
(c) はループ終了のための文
whileを選んだ以上、終わりを示す必要があるので(c)にはendwhileが入る。
正しい組み合わせ
(a) while (x ≠ y)
(b) x > y
(c) endwhileこの組み合わせで、x == y となるまで差を取り続け、その値が最大公約数として return x される。
動作例(36 と 60 で確認しよう)
x = 36,y = 60→x < y→y = 60 − 36 = 24x = 36,y = 24→x > y→x = 36 − 24 = 12x = 12,y = 24→x < y→y = 24 − 12 = 12x = 12,y = 12→ ループ終了 →return 12が最大公約数
補足
- これは最も基本的な「引き算版」ユークリッド互除法である。
- 「剰余(%)」を使う形式もあるが、本問は繰り返し引き算型での出題である。



コメント