出典:令和8年度 ITパスポート試験(IP) 問85
予備知識
| 用語 | 意味 |
|---|---|
| 関数 | 処理のまとまり。何かを入れると何かを計算して何かを返してくれるやつ |
| 引数 | 関数に入れる値 |
| 戻り値 | 関数から出てくる値 |
| true | 2つの状態「オン(on)/オフ(off)」のうち「オン(on)」を意図する表現 |
| false | 2つの状態「オン(on)/オフ(off)」のうち「オフ(off)」を意図する表現 |
| 変数 | プログラミング言語における「値を入れておく箱」 |
| 論理型 | 変数の種類のひとつで「その箱には真(true)か偽(false)のどちらかの値が入りますよ」な決まり |
| 整数型 | 変数の種類のひとつで「その箱には(桁数の大きくない)整数を入れていいよ」な決まり |
| if文 | プログラミングで使う構文のひとつで「もし○○だったら××してね~」な条件分岐を書くときに使う構文 |
| while文 | プログラミングで使う構文のひとつであり「条件を満たしている間は同じ処理を繰り返してね~」な繰り返し処理を書くときに使う構文 |
問題
| 問題文 |
|---|
| 関数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 |
| ピヨ意訳:以下の処理は素数かどうかを判定するプログラムだよ。素数だったらtrueを、素数じゃなかったらfalseを返すよ。【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】より大きい |
| ピヨ意訳:- | |

正解
| 正解 | |
|---|---|
| エ | 【a】より小さい 【b】より大きい |
| ピヨ意訳:- | |
ピヨピヨ解説
ふむ、なるほど。
横着して解いてみましょうか。
【a】に入る候補は
1.以下
2.より小さい
です。
【b】に入る候補は
1.と等しい
2.より大きい
です。
それを踏まえて
if(numが2【a】)
return false
else
に注目してください。
戻り値は「false(素数では ない)」です。
「2」は素数です。
ということは、このif文の条件に「2」が当てはまってはダメです。
条件に「2」が当てはまると「false(素数では ない)」になっちゃいますからね。
よって【a】に入るのは「より小さい」になります。
「以下」だと「2」が含まれちゃいますからね。
次に
while(numがdiv【b】)
に注目してください。
【b】に入るのが「と等しい」であれば、普通はif文を使います。
わざわざwhile文を使っているということは、ループする可能性があるということです。
【b】に入るのは「より大きい」になります。
ということで「エ:【a】より小さい 【b】より大きい」が正解です。
……のように私だったら解いちゃいますけどね。
もうちょっと真っ当に解くのであれば【b】は「num」と「div」の関係性を見ます。
while(numがdiv【b】)
if(num÷divの余りが0と等しい)
return false
else
div ← div+1
endif
endwhile
となっていますよね。
ザックリ「num」と「div」に注目すると
num→ループしても変わらない
div→ループするごとに1ずつ増える
です。
このことから、ループする条件は
divが〇〇より小さい(もしくは、以下の)間
だと推測できます。
「divが〇〇より大きい間」とかにしちゃうと、ループが終わらなくなるからです。
仮にループの条件が「divが〇〇より大きい間」だった場合、最初の時点で「divが〇〇以下」の状態であれば条件に合致しないのでループに入りませんよね。
逆に最初の時点で「divが〇〇より大きい」の状態であればループに入りますが、一生ループから抜けません。
divの値はループするごとに増えていくからです。
「divが〇〇以下」になることが ありません。
ずっと「divが〇〇より大きい間」を満たし続けます。
ループする条件を「divが〇〇より大きい間」とかにすると、プログラムの動きとして おかしなことになります。
そんなわけで、ループする条件は「divが〇〇より小さい(もしくは、以下の)間」です。
「divが〇〇より小さい(もしくは、以下の)間」は言い方を変えると「〇〇がdivより大きい(もしくは、以上の)間」です。
「〇〇」を「num」に置き換えると「numがdivより大きい(もしくは、以上の)間」となります。
ということで【b】に入るのは「より大きい」だと判断できます。
ちなみに、このような考え方は【b】の選択肢に「より小さい」があったときの対策です。
「と等しい」と「より大きい」しか選択肢がないのであれば
「と等しい」だったらif文を使うでしょ
と考えて「と等しい」は候補から外しちゃいます。






