跳到正文

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

这道题的解析和你的作答记录。

問85
頻出度★★☆

関数 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

出典 令和8年度 ITパスポート試験 問85
解説

問 85

  • 错误ア

    若把 a 设为「小于等于」,则 num=2 时「2 小于等于 2」为真,立即 return false,与 isPrime(2) 应为 true 的条件相违背。此外 b 的「等于」也是错的,num=4 时「4 等于 2」为假而不进入循环,return true,把合数 4 误判为素数。

  • 错误イ

    虽然 b (大于) 是正确的,但把 a 设为「小于等于」这一点是错的。num=2 时「2 小于等于 2」为真而 return false,无法满足 isPrime(2)=true。会把素数 2 本身排除掉。

  • 错误ウ

    虽然 a (小于) 是正确的,但把 b 设为「等于」这一点是错的。若 while 条件为「num 等于 div」,则 num=4 且 div=2 时「4 等于 2」为假而不进入循环,return true,把合数 4 误判为素数。一次也不会执行基于除法的判定。

  • エ

    正解 正确答案是エ (a:小于, b:大于)。这是一个让 div 从 2 开始递增、检查能否整除来判断素数的算法。首先看 a:最初的 if 是为了「把小于 2 的值 (如 1) 判为非素数而排除」,而 num=2 时必须返回 true。把 a 设为「小于」,则 num=2 时「2 小于 2」为假,于是进入 else,判定得以正确继续。接着看 b:while 是让除数 div 从 2 递增到 num 之前、逐一尝试能否整除的循环,其条件为「在 div 到达 num 之前=num 大于 div 期间」反复执行。例如 num=4 时,div=2 时「4 大于 2」为真而进入循环,4÷2 的余数为 0,故返回 false。num=2 时「2 大于 2」为假而不进入循环,return true。num=3 时 div=2 余数为 1,div 增至 3 后「3 大于 3」为假而 return true。全部都能正确判定。

ここがポイント
  • 素数判定算法:让 div 从 2 递增到 num 之前,只要在某一步能整除即为合数 (false),直到最后都无法整除则为素数 (true)。
  • 伪代码中条件表达式与边界值的读法:通过 isPrime(2)=true 等具体例子,验证并确定 if 的提前 return 所排除的范围 (小于 2),以及 while 的继续条件 (在 div 到达 num 之前)。
用語
解答問85エ
练这一题

作答记录