基本情報技術者試験の科目Bのサンプル問題を題材に,最大公約数を求める処理について学習します。この問題では,変数の値を比較しながら,繰返し処理によって最大公約数を求める方法を確認します。
(令和4年度12月公開) 基本情報技術者試験 サンプル問題 科目B 問4
問 次のプログラム中の a 〜 c に入れる正しい答えの組合せを,解答群の中から選べ。
関数 gcd は,引数で与えられた二つの正の整数 num1 と num2 の最大公約数を,次の(1)~(3)の性質を利用して求める。
(1) num1 と num2が等しいとき,num1 と num2 の最大公約数は num1 である。
(2) num1 が num2 より大きいとき,num1 と num2 の最大公約数は,(num1 - num2) と num2 の最大公約数と等しい。
(3) num2 が num1 より大きいとき,num1 と num2 の最大公約数は,(num2 - num1) と num1 の最大公約数と等しい。
〔プログラム〕
○整数型: gcd(整数型: num1,整数型: num2)
整数型: x ← num1
整数型: y ← num2
a
if ( b )
x ← x - y
else
y ← y-x
endif
c
return x
解答群
a | b | c | |
| ア | if (x ≠ y) | x < y | endif |
| イ | if (x ≠ y) | x > y | endif |
| ウ | while (x ≠ y) | x < y | endwhile |
| エ | while (x ≠ y) | x > y | endwhile |
【解答】エ
【解説】
このプログラムは,ユークリッドの互除法を利用して,2つの整数の最大公約数を求める処理である。大きい方の数から小さい方の数を繰り返し引く方法で求めている。
最大公約数を求める処理は,(1)より,num1 と num2 が等しくなるまで繰り返すため,aは,while (x ≠ y) となる。
また,(2)より,x の値が y より大きい場合に x - y を計算するため,bは,x > y となる。
そして,while文による繰返し処理の終わりには endwhile を記述するため,cは,endwhile となる。
【参考】
この問題のポイント
この問題から学べることは,
- 最大公約数を求める方法
- 変数の値を比較して処理を分岐する方法
- while文を使って,条件を満たす間処理を繰り返す方法
- 変数の値を追跡して,プログラムの処理結果を確認する方法
です。特に,2つの値が等しくなるまで,大きい方の値から小さい方の値を引く処理を繰り返して,最大公約数を求める方法を理解しておきましょう。
基本情報技術者試験の学習におすすめの参考書
基本情報技術者試験の合格を目指す方におすすめの参考書です。
学習のお役に立ちましたら
この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。
よろしければ、このサイトを応援いただけますと嬉しいです。
※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。


