令和6年秋期試験午後問題 問3
問3 プログラミング
⇱問題PDF
素数を列挙するアルゴリズムに関する次の記述を読んで,設問に答えよ。
素数を列挙するアルゴリズムに関する次の記述を読んで,設問に答えよ。
広告
素数とは,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以上の自然数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
ウ:t+d
解説
この設問の解説はまだありません。設問3
図3中のエ~カに入れる適切な字句を答えよ。
解答例・解答の要点
エ:isPrime[(d-1)÷2]がtrueと等しい
オ:(t-1)÷2
カ:t+2×d
オ:(t-1)÷2
カ:t+2×d
解説
この設問の解説はまだありません。設問4
prime1(20),prime2(20),prime3(20)をそれぞれ実行したとき,図1中の(L1)の行,図2中の(L2)の行,図3中の(L3)の行が実行される回数をそれぞれ答えよ。
解答例・解答の要点
L1:171
L2:13
L3:3
L2:13
L3:3
解説
この設問の解説はまだありません。広告