関数 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 之前)。