IPA過去問ドリル

平成25年度 春期 応用情報技術者試験 午前 問7

テクノロジ/アルゴリズム

配列Aに対して次の手続を実行して,2≦k≦100である素数kだけを全て出力したい。a,b,cに入るループの初期値,終値,増分として,適切な組合せはどれか。 for k = 2 to 100 step 1:  A[k] = 1; for m = 2 to 10 step 1:  for k = a to b step c:   A[k] = 0; for k = 2 to 100 step 1:  if A[k] ≠ 0:   print k; (注:本サイトでは原問題の表を文字表記に変換しています)

出典:平成25年度 春期 応用情報技術者試験 午前 問7

正解:イ

解説

内側のforループでは,mの倍数(2m,3m,…)に対応する配列要素を0にすることで合成数を除外するエラトステネスのふるいを実装しています。倍数は2m以上100以下をm刻みで進む必要があるため,a=2m,b=100,c=mが正解です。

選択肢ごとの解説

  • 誤り。a=2,c=1では,mに関わらず2から100までの全要素を0にしてしまい,素数まで消してしまいます。
  • 正しい。mの倍数である2m,3m,…,100をm刻みで0にすることで合成数だけを除外できます。
  • 誤り。a=m,b=m²ではmの倍数を正しく網羅できず,除外すべき合成数を取りこぼします。
  • 誤り。a=m²,c=1では,m²から100までの連続した整数をすべて0にしてしまい,mの倍数以外も消してしまいます。
応用情報技術者の過去問を演習モードで解く