応用情報技術者過去問題 令和6年秋期 午後問3
⇄問題文と設問を画面2分割で開く⇱問題PDF問3 プログラミング
素数を列挙するアルゴリズムに関する次の記述を読んで,設問に答えよ。
素数とは,2以上の自然数のうち,正の約数が1と自身だけである数のことである。
2以上の自然数Nに対して,N以下の素数を列挙する関数 prime1 のプログラムを図1に示す。なお,本問では,配列の要素番号は1から始まり,要素数が0の配列を{}で表す。 この関数 prime1 の時間計算量は,Nを用いて表すとO(ア)である。
〔アルゴリズムの改良1〕
素数の定義によって,2以上の自然数sについて,s自身を除くsの正の倍数uは,1とu以外にsも約数に含むので素数ではない。この性質を利用して関数 prime1 を改良し,次の手順で素数を列挙する関数 prime2 を考える。
〔アルゴリズムの改良2〕
4以上の偶数は全て2の倍数であるので素数ではない。したがって,2以外の素数を列挙するためには奇数だけを考慮すればよい。この性質を利用して,関数 prime2 に次の変更を加えた関数 prime3 を考える。
素数とは,2以上の自然数のうち,正の約数が1と自身だけである数のことである。
2以上の自然数Nに対して,N以下の素数を列挙する関数 prime1 のプログラムを図1に示す。なお,本問では,配列の要素番号は1から始まり,要素数が0の配列を{}で表す。 この関数 prime1 の時間計算量は,Nを用いて表すとO(ア)である。
〔アルゴリズムの改良1〕
素数の定義によって,2以上の自然数sについて,s自身を除くsの正の倍数uは,1とu以外にsも約数に含むので素数ではない。この性質を利用して関数 prime1 を改良し,次の手順で素数を列挙する関数 prime2 を考える。
- 2以上N以下の自然数について,全て"素数である"とマークする。
- 2以上N以下の自然数dについて,次の(a),(b)を行う。
- dが"素数ではない"とマークされている場合,何もしない。
- dが"素数である"とマークされている場合,次の処理を行う。
- dが素数であることを確定させる。
- d以上の自然数xについて,dをx倍した数を"素数ではない"とマークする。
〔アルゴリズムの改良2〕
4以上の偶数は全て2の倍数であるので素数ではない。したがって,2以外の素数を列挙するためには奇数だけを考慮すればよい。この性質を利用して,関数 prime2 に次の変更を加えた関数 prime3 を考える。
- 関数の戻り値として素数の一覧が格納される primes にあらかじめ2を格納しておく。
- いずれのループも奇数についてだけ実行されるようにする。
- 3以上の自然数2k+1が素数か否かを isPrime[k] で表すようにする。
設問1
本文中のアに入れる適切な字句を答えよ。
解答入力欄
- ア:
解答例・解答の要点
- ア:N2
解説
この設問の解説はまだありません。
設問2
図2中のイ,ウに入れる適切な字句を答えよ。
解答入力欄
- イ:
- ウ:
解答例・解答の要点
- イ:isPrime[d]がtrueと等しい
- ウ:t+d
解説
この設問の解説はまだありません。
設問3
図3中のエ~カに入れる適切な字句を答えよ。
解答入力欄
- エ:
- オ:
- カ:
解答例・解答の要点
- エ:isPrime[(d-1)÷2]がtrueと等しい
- オ:(t-1)÷2
- カ:t+2×d
解説
この設問の解説はまだありません。
設問4
prime1(20),prime2(20),prime3(20)をそれぞれ実行したとき,図1中の(L1)の行,図2中の(L2)の行,図3中の(L3)の行が実行される回数をそれぞれ答えよ。
解答入力欄
- L1:回
- L2:回
- L3:回
解答例・解答の要点
- L1:171
- L2:13
- L3:3
解説
この設問の解説はまだありません。