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
[プログラム]
○論理型: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
このページは閲覧用ページです。
履歴を残すには、 「新しく出題する(ここをクリック)」 をご利用ください。
問題
反映中…
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
[プログラム]
○論理型: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までの整数で割り切れるかを調べる必要があります。
aを「以下」にするとnum=2までfalseになり、設問のisPrime(2)がtrueという条件に反します。また、bが「と等しい」では2以外の除数を順に試せません。
bを「より大きい」として除数を順に試す点は合っていますが、aを「以下」にすると素数2を誤ってfalseにします。
aを「より小さい」とすれば2を残せますが、bが「と等しい」では、numとdivが等しい場合だけを調べることになり、合成数を正しく判定できません。
正しいです。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
この解説の修正を提案する
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
この解説の修正を提案する
前の問題(問84)へ
令和8年度 問題一覧
次の問題(問86)へ