小杨想编写一个判断任意输入的整数 $N$ 是否为素数的程序,下面哪个方法不合适?( )
这题考的是算法适用场景,核心在于理解‘判断’与‘查找’的本质区别。拿到题先想:二分法能直接用来判定素数吗?显然不能,它得依赖一个已经排好序的素数表。既然表是现成的,那‘判断’就失去了意义,逻辑上根本站不住脚。
很多同学习惯把‘高级’等同于‘正确’,看到二分法就下意识觉得它快、它就合适,结果忽略了前提条件:二分必须建立在有序数据上。若题目是‘给定素数表,判断N是否在表中’,那C就完全合理了。但题干只给了一个整数N,让你‘判断’它是否为素数,这时候用二分法属于偷换概念——你还没生成素数表,二分无从下手;即便你硬生生预处理了一个表,那也变成了‘查表’而非‘判断’。命题人就是喜欢在这种边界条件上挖坑,让只背结论的同学掉进去。
考点定位 GESP 五级算法复杂度与常用算法适用性。命题人用‘判断素数’这个经典问题,卡住考生对算法本质与边界条件的理解——许多学生只背了‘筛法快’或‘枚举简单’,却分不清‘筛法’与‘二分’的根本差异。
解题思维 二分法的核心是‘在有序数组中查找目标’,前提是数组已排好序。若用二分判断 N 是否为素数,意味着你已预先生成了素数表,这等于‘已经知道答案再查’,逻辑上无法作为‘判断素数’的方法。而枚举、埃氏筛、线性筛都是在‘未知’状态下通过计算得出结果,属于真正的判断方法。筛法本质是预处理素数表,适合批量判断;枚举适合单数判断;二分则完全错位。
陷阱拆解 选项 A/B 是筛法,本质是预处理素数表,适合批量判断;选项 D 是枚举,适合单数判断;选项 C 二分看似‘高级’,实则偷换概念——它不是判断方法,而是查找方法。命题人利用‘高级算法=好方法’的思维定势,把二分塞进判断场景,谁只背结论谁就掉坑。绝对化表述如‘哪个方法不合适’是典型陷阱,C 看似合理实则逻辑错误。
反命题思维 若题目改为‘给定素数表,判断 N 是否在表中’,C 就合理了;若题目改为‘求第 k 个素数’,筛法依然比二分更自然。记住:刷到‘判断/查找’类题,先问‘这题考的是算法能力还是数据结构能力’。
考频趋势与预测 结合题库数据看,枚举法共考过 159 题,是绝对主力,尤其在 GESP 五级(5 题)和 CSP 入门级(133 题)高频出现;质数与合数概念题共 52 题,其中 GESP 五级占了 29 题,说明五级对素数判定的考察非常集中。二分答案仅考了 6 题,且多集中在 GESP 八级和 CSP 提高级,五级里只出现过 1 次。二分查找相关题目共 39 题,五级有 16 题,但那是用二分查有序表,而非判断素数。
基于此,未来考试若继续聚焦五级算法,大概率仍会围绕‘素数判定’和‘枚举优化’出题,筛法与枚举依然是高频考点;而二分法在五级出现的概率极低,除非题目明确给出素数表或要求查第 k 个素数,否则不会再用二分去‘判断’素数。因此,选 C 是稳妥且符合命题规律的。