ITパスポート

問85

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

ITパスポート 令和8年 問85

選択肢

正解と解き方・学習ポイント(AI解説)

正解:
あなたの回答:未回答

素数は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 の範囲で割り算を試せるため、素数判定の処理として適切です。

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は「より大きい」です。

テクノロジ系 > 基礎理論 > アルゴリズムとプログラミング

順次、単語を追加予定です。もうしばらくお待ちください。