ITパスポート過去問 令和8年度(2026年)問85
関数 isPrime は,引数として与えられた正の整数が,素数であれば true を,素数でなければ false を戻り値とする。例えば,関数 isPrime は isPrime(2) として呼び出したときの戻り値は true である。プログラム中のa,bに入れる字句の適切な組合せはどれか。
〔プログラム〕
○論理型: isPrime(整数型: num)
整数型: div ← 2
if (numが2a)
return false
else
while (numがdivb)
if (num ÷ divの余りが0と等しい)
return false
else
div ← div + 1
endif
endwhile
return true
endif

選択肢
- ア
- イ
- ウ
- エ
正解と解き方・学習ポイント(AI解説)
素数は2以上の整数で、1と自分自身以外に割り切れる約数をもちません。したがって、numが2より小さい場合は素数ではないのでfalseにします。numが2以上の場合は、divを2から増やしながら、divがnumより小さい間だけ割り切れるかを確認します。よってaは「より小さい」、bは「より大きい」です。
Point
この問題は、素数の定義に基づく境界条件(2未満は素数ではない)と、割り算を試す範囲(divをどこまで増やすか)を正しく条件式に反映できるかを確認することがねらいです。
解くために必要な知識
この問題を解くには、素数の定義と、繰返し条件の境界の決め方の理解が必要です。
用語の整理
素数
-
2以上の整数で、正の約数が1と自分自身だけの数です。
-
例: 2, 3, 5, 7
-
例(素数ではない): 1, 4, 6, 8
余り(剰余)
-
numをdivで割ったときに余る部分です。
-
余りが0のとき、numはdivで割り切れます。
比較(大小関係)
- この問題では、条件式に入る語として次が使われています。
| 表現 | 意味する関係 |
|---|---|
| 以下 | num <= 2 など |
| より小さい | num < 2 など |
| より大きい | num > div など |
| と等しい | num = div など |
境界条件の考え方
a(if側)の境界
-
素数は2以上なので、num < 2 のときはfalseが原則です。
-
num = 2 は素数なので、num <= 2 としてしまうと誤りになります。
b(while側)の境界
-
divを2から増やして調べるとき、div = num まで含めると必ず割り切れてしまいます。
-
そのため、div < num の範囲で止める必要があります。
-
擬似コードが「numがdivb」なので、成立させたい条件は num > div です。
問題の解法手順
解く手順
1. 2未満を除外する条件を決める
-
素数は2以上の整数なので、numが2より小さい場合は素数ではありません。
-
そのため、if条件は「numが2より小さい」とする必要があります。
-
よって a は「より小さい」です。
2. 割り算を試す範囲(while条件)を決める
-
divは2から始めて1ずつ増やし、numがdivで割り切れるかを調べます。
-
div = num まで調べると、必ず num ÷ num の余りは0になるため、素数でもfalseになってしまいます。
-
したがって、調べるのは div < num の範囲にします。
-
擬似コードの形が「while (numがdivb)」なので、これは num > div と同じ意味になる必要があります。
-
よって b は「より大きい」です。
3. 余りが0なら合成数としてfalseにする
-
ループ中に一度でも余りが0になれば、numはdivで割り切れるので素数ではありません。
-
最後まで割り切れなければtrueになります。
選択肢ごとの解説
- ア:不正解
aが「以下」だと num <= 2 がfalse判定となり、num=2が素数なのにfalseになります。bが「と等しい」だと num = div の間ループする形になり、divが増えないまま条件が成立しないため、割り算による判定を行えません。
- イ:不正解
aが「以下」だと num=2が素数なのにfalseになります。bが「より大きい」は div < num の範囲に相当し考え方としては適切ですが、aが誤りです。
- ウ:不正解
aが「より小さい」は num < 2 を除外できるため適切です。bが「と等しい」だと num = div の間ループする形になり、divが増えないまま条件が成立しないため、割り算による判定を行えません。
- エ:正解
aが「より小さい」は num < 2 を素数でないとして処理でき、num=2は除外されません。bが「より大きい」は num > div となり、div < num の範囲で割り算を試せるため、素数判定の処理として適切です。
まとめ
素数は2以上の整数で、1と自分自身以外に割り切れる約数をもちません。したがって、numが2より小さい場合は素数ではないのでfalseにします。numが2以上の場合は、divを2から増やしながら、divがnumより小さい間だけ割り切れるかを確認します。よってaは「より小さい」、bは「より大きい」です。
テクノロジ系 > 基礎理論 > アルゴリズムとプログラミング
aが「以下」だと num <= 2 がfalse判定となり、num=2が素数なのにfalseになります。bが「と等しい」だと num = div の間ループする形になり、divが増えないまま条件が成立しないため、割り算による判定を行えません。
aが「以下」だと num=2が素数なのにfalseになります。bが「より大きい」は div < num の範囲に相当し考え方としては適切ですが、aが誤りです。
aが「より小さい」は num < 2 を除外できるため適切です。bが「と等しい」だと num = div の間ループする形になり、divが増えないまま条件が成立しないため、割り算による判定を行えません。
aが「より小さい」は num < 2 を素数でないとして処理でき、num=2は除外されません。bが「より大きい」は num > div となり、div < num の範囲で割り算を試せるため、素数判定の処理として適切です。