ITパスポート 過去問
令和8年度
問85 (テクノロジ系 問31)

このページは閲覧用ページです。
履歴を残すには、 「新しく出題する(ここをクリック)」 をご利用ください。

問題

ITパスポート試験 令和8年度 問85(テクノロジ系 問31) (訂正依頼・報告はこちら)

関数isPrimeは、引数として与えられた正の整数が、素数であればtrueを、素数でなければfalseを戻り値とする。例えば、関数isPrimeをisPrime(2)として呼び出したときの戻り値はtrueである。プログラム中のa、bに入れる字句の適切な組合せはどれか。
[プログラム]
○論理型:isPrime(整数型:num)
 整数型:div ← 2
 if(num が 2( a ))
  return false
 else
  while(num が div( b ))
   if(num÷divの余りが0と等しい)
    return false
   else
    div ← div+1
   endif
  endwhile
  return true
 endif
  • a:以下     b:と等しい
  • a:以下     b:より大きい
  • a:より小さい  b:と等しい
  • a:より小さい  b:より大きい

正解!素晴らしいです

残念...

この過去問の解説 (3件)

01

素数は2以上で、1と自分自身以外に正の約数をもたない整数です。このプログラムでは、2未満を先に除外し、2からnum−1までの整数で割り切れるかを調べる必要があります。

選択肢1. a:以下     b:と等しい

aを「以下」にするとnum=2までfalseになり、設問のisPrime(2)がtrueという条件に反します。また、bが「と等しい」では2以外の除数を順に試せません。

選択肢2. a:以下     b:より大きい

bを「より大きい」として除数を順に試す点は合っていますが、aを「以下」にすると素数2を誤ってfalseにします。

選択肢3. a:より小さい  b:と等しい

aを「より小さい」とすれば2を残せますが、bが「と等しい」では、numとdivが等しい場合だけを調べることになり、合成数を正しく判定できません。

選択肢4. a:より小さい  b:より大きい

正しいです。numが2より小さければfalseとし、それ以外ではnumがdivより大きい間、2から順に割り切れるかを確認します。約数が見つからなければtrueを返します。

まとめ

2未満を除外し、divがnumに達するまで候補の除数を順に試す必要があります。

参考になった数4

02

素数かどうかを確認するプログラムで、

素数であればtreu、素数でなければfalseを返します。

 

最初の設問では、

「num が 2以下」か「num が 2より小さい」

時に、falseを返します。 

素数は2以上の整数のうち、1と自分自身でしか割り切れない数のことです。

よって、無条件にfalseを返すのは、2を含めない「2より小さい」時になります。

 

次の設問では、

「num が divと等しい」か「num が divより大きい」間、

それ以降の処理を繰り返すことになります。

divの初期値は2のため、引数numが2より大きい場合は

この処理が1回しか実行されなくなります。

 

自分自身で割り切れるまで繰り返す必要があるため、

「divより大きい」が正解になります。


 

選択肢1. a:以下     b:と等しい

不正解です。

選択肢2. a:以下     b:より大きい

不正解です。

選択肢3. a:より小さい  b:と等しい

不正解です。

選択肢4. a:より小さい  b:より大きい

正解です。

参考になった数1

03

本設問では関数の読み取りが問われています。

素数とは自分以外の数では割り切れない数のため、引数が素数であるか否かは引数を2から順に割り、割り切れないことを確認します。

 

(a)は

if(num が 2( a ))
  return false

とあり、引数が2以下もしくはより小さければfalseを返す、つまり素数ではないと判定することになっています。2は素数なので、(a)に入るのは「より小さい」となります。

 

(b)は

  while(num が div( b ))
   if(num÷divの余りが0と等しい)
    return false
   else
    div ← div+1
   endif
  endwhile
  return true
とあり、最初に「整数型:div ← 2」と定義されていることから、2から順にnumで与えられた引数を割り、割り切れる(num÷divの余りが0と等しい場合にはfalseを返し、素数ではないと判定します。

num÷divをするためにはnumがdivより大きい必要があるので、(b)に入るのは「より大きい」となります。

参考になった数1