素数を求める処理【基本情報技術者試験 科目B 公開問題】

令和5年度 基本情報技術者試験 サンプル問題 科目B 問1のブログのアイキャッチ画像 科目B 公開問題
広告

← 科目Bの公開問題一覧へ戻る

 基本情報技術者試験の科目Bの公開問題を題材に,素数を求める処理について学習します。この問題では,割り算の余りや平方根を利用して,整数が素数かどうかを判定する方法を確認します。

広告

令和5年度 基本情報技術者試験 公開問題 科目B 問1

 次のプログラム中の   a    b   に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1から始める。

 関数 findPrimeNumbers は,引数で与えられた整数以下の,全ての素数だけを格納した配列を返す関数である。ここで,引数に与える整数は2以上である。

〔プログラム〕

○整数型の配列: findPrimeNumbers(整数型: maxNum)

 整数型の配列: pnList ← {}  // 要素数0の配列

 整数型: i,j

 論理型: divideFlag

 for (i を 2 から   a   まで 1 ずつ増やす)

  divideFlag ← true

  /* iの正の平方根の整数部分が2未満のときは,繰返し処理を実行しない */

  for (j を 2 から iの正の平方根の整数部分 まで 1 ずつ増やす)  // α

   if (   b   )

    divideFlag ← false

    αの行から始まる繰返し処理を終了する

   endif

  endfor

  if (divideFlag が true と等しい)

   pnListの末尾 に iの値 を追加する

  endif

 endfor

 return pnList

解答群

a

b

maxNumi ÷ j の余り が 0 と等しい
maxNumi ÷ j の商 が 1 と等しくない
maxNum + 1i ÷ j の余り が 0 と等しい
maxNum + 1i ÷ j の商 が 1 と等しくない

【解答】

【解説】

関数 findPrimeNumbers は,引数で与えられた整数以下の素数を求め,配列に格納して返す関数である。外側のfor文では,2から maxNum までの整数について,順番に素数かどうかを判定している。そのため,aには maxNum が入る。

素数とは,1とその数自身以外に約数をもたない整数である。ある整数 i が素数でない場合,2以上の整数で割り切れるため,i ÷ j の余りが0になるかどうかを調べればよい。そのため,bには i ÷ j の余りが0と等しい が入る。

また,jは2からiの正の平方根の整数部分まで調べている。これは,「令和5年度 基本情報技術者試験 公開問題 科目B 問1」の解答_画像02を超える約数を調べなくても,それより小さい約数との組合せによって判断できるためである。

例えば,36の場合,約数の組合せは,

2×18,3×12,4×9,6×6

のようになる。「令和5年度 基本情報技術者試験 公開問題 科目B 問1」の解答_画像03= 6 なので,6まで調べれば,それより大きい約数を調べなくても,36が素数でないことを判定できる。

【参考】

「令和5年度 基本情報技術者試験 公開問題 科目B 問1」の解答_画像

この問題のポイント

 この問題から学べることは,

  • 素数を判定する方法
  • 割り算の余りを利用して,整数が割り切れるかを判定する方法
  • 整数の平方根まで調べて,素数かどうかを判定する方法
  • 繰返し処理と条件分岐を組み合わせて,素数を配列に格納する方法

です。特に,整数が素数かどうかを判定するときは,2からその整数の正の平方根の整数部分までの数で割り切れるかを調べればよいことを理解しておきましょう。

基本情報技術者試験の学習におすすめの参考書

基本情報技術者試験の合格を目指す方におすすめの参考書です。

令和08年 イメージ&クレバー方式でよくわかる かやのき先生の基本情報技術者教室
基礎理論からコンピュータ・ネットワーク・データベースまで、基本情報技術者試験の全範囲をわかりやすく学べる定番テキストです。図解が豊富で、初学者にもおすすめです。

キタミ式イラストIT塾 基本情報技術者 令和08年
イラストを使った解説が特徴の人気参考書です。基礎理論の考え方や計算問題もイメージで理解しやすく、独学学習との相性が良い一冊です。

令和08年 基本情報技術者 合格教本
試験範囲を体系的に学習したい方におすすめの教科書です。基礎理論の各テーマも丁寧に解説されており、理解を深めながら学習を進められます。

学習のお役に立ちましたら

この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。

よろしければ、このサイトを応援いただけますと嬉しいです。

※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。

広告