戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2016年 秋期 午前(科目A)07


問題文

整数, ()に対して、次のように定義された関数がある。の値は幾らか。ここで、で割った余りである。  

選択肢

2
3(正解)
5
7

最大公約数を求める再帰関数 F(x,y) の値【午前2 解説】

要点まとめ

  • 結論→ この再帰的定義はユークリッドの互除法で最大公約数を計算し、F(231,15)=3になります。計算は余りを繰り返すことで必ず停止します。
  • 根拠→ 定義は y=0 のとき x を返し、y>0 のとき F(y, x mod y) を呼ぶため、gcd(x,y) を求める標準的な再帰式と同一です。
  • 差がつくポイント→ 途中での余り計算ミスを防ぎ、231 mod 15 = 6、15 mod 6 = 3、6 mod 3 = 0 の一連を正確に追えるかが鍵です。

正解の理由

関数の定義
はユークリッドの互除法そのものです。互除法は最大公約数 (gcd) を求めるアルゴリズムで、 が成り立ちます。したがって を求めればよく、計算すると 3 になります。
計算の流れ: より
より
より (基底条件)
ゆえに答えは 3。

よくある誤解

  • 「x mod y を逆に計算する」: を取り違えると全く別の過程になりミスします。
  • 「ベースケースの理解不足」: のときに を返す意味を誤解すると計算を止められません。
  • 「単純な割り算ミス」:231 ÷ 15 の余りを誤って 3 や 5 にしてしまうことがよくあります。

解法ステップ

  1. 定義を「再帰的に余りを取ることで最大公約数を求める」互除法と認識する。
  2. 与えられた数で順に余りを計算する:まず を求める。
  3. 得られた余りが 0 になるまでステップ 2 を繰り返す(各ステップで引数を入れ替える)。
  4. 余りが 0 になったときのもう一方の数が答え(gcd)である。
  5. 本問では で終了、答えは 3。

選択肢別の誤答解説

  • ア: 2 — 231 と 15 の共通因子として 3 が存在するため 2 は誤り。231 は奇数なので 2 は共通因子になり得ません。
  • : 3 — 正解。上の計算列に従うと最終的に 3 が最大公約数になります。
  • ウ: 5 — 15 は 5 を因子に持ちますが 231 は 5 で割り切れないため共通因子ではありません。
  • エ: 7 — 231 は 7 を因子に持ちますが 15 は 7 で割り切れないため最大公約数にはなりません。

補足コラム

ユークリッドの互除法は紀元前から知られる非常に効率的な gcd アルゴリズムで、通常の整数での計算はステップ数が非常に少なく済みます。素因数分解すると となり共通因子は 3 のみであることからも答えが 3 であることが確認できます。拡張ユークリッドの互除法を使えば、gcd と同時に係数を求めて線形結合 を得ることもできます。

FAQ

Q: F の定義は必ず停止しますか?
A: はい。互除法では各ステップで第2引数(余り)が前回より小さくなるため、最終的に 0 になり停止します。
Q: 初期で y=0 ならどうなりますか?
A: 定義通り です。これは gcd(x,0)=x という性質に一致します。
Q: 再帰を使わずに求められますか?
A: ループ(反復)で同じ余り計算を行えば良く、実装上は再帰より反復が一般的に使いやすいです。

関連キーワード: 最大公約数、ユークリッドの互除法、再帰、gcd、余り演算、整数論、拡張ユークリッド法
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について