$1$ 到 $1000$ 之间,不能被 $2,3,5$ 中任意一个数整除的整数有多少个?
这道题考的是容斥原理,核心是算出能被2、3或5整除的数有多少个,再用总数减去它。拿到题先想:分别算出单集合、两两交集、三集合交集的个数,按“单加、双减、三加”的规律拼起来。
最容易错在容斥的加减号顺序:三个集合时,单元素集合的和要加,两两交集要减,三集合交集要加,很多同学会漏掉最后的“加三交”或者把两两交集当成加。另外,计算lcm时容易手滑,比如把6写成9,或者把15写成25,导致整除个数算偏。还有,1到1000中能被d整除的个数是向下取整,有人会误以为1000/d直接就是个数,忽略了取整。
本题考查组合数学中的容斥原理,用来解决“至少满足一个条件”的计数问题。核心公式是:|A∪B∪C| = |A|+|B|+|C| − |A∩B| − |A∩C| − |B∩C| + |A∩B∩C|。这里的集合A、B、C分别代表1到1000中能被2、3、5整除的数。题目要求的是“不能被2、3、5任意一个整除”的数,所以思路很清晰:先算出能被至少一个数整除的总数,再用1000减去它即可。
具体怎么算呢?1到N中能被d整除的数的个数就是⌊N/d⌋,直接除法取整。我们先把各个集合的大小列出来:
两两交集对应的是lcm(d1,d2)的倍数。2和3的最小公倍数是6,所以|A∩B| = ⌊1000/6⌋ = 166;2和5的最小公倍数是10,|A∩C| = ⌊1000/10⌋ = 100;3和5的最小公倍数是15,|B∩C| = ⌊1000/15⌋ = 66。
三个集合的交集就是lcm(2,3,5)=30的倍数,|A∩B∩C| = ⌊1000/30⌋ = 33。
现在代入容斥公式:
|A∪B∪C| = 500 + 333 + 200 − 166 − 100 − 66 + 33 = 734。
这就是1到1000中能被2、3或5至少一个整除的数的个数。题目问的是“不能被任意一个整除”,所以答案是1000 − 734 = 266,对应选项A。
命题人挖坑的地方很典型:一是容斥的符号顺序,很多同学背公式时只记得“加减交替”,但容易在三个集合时漏掉最后的“加三交”;二是计算lcm时粗心,比如把6算成9,或者把15算成25,导致整除个数偏差;三是取整的细节,1000/3=333.33…,必须向下取整为333,有人会直接写333.33或者误以为334。这些坑在考试里很容易丢分。
从考频看,“整数与整除”这个知识点在题库里一共考了9题,跨度从2009年到2025年,其中2025年CSP提高级就考了1题,说明这类基础计数题年年都有,而且越来越偏向综合应用。而“排列组合基础”考得更多,2025年单年就考了43题,占比很高,说明组合计数是近年高频考点。容斥原理作为组合计数的核心工具,属于“计数原理”大类,该大类共36题,近年也保持每年3-5题的稳定输出。因此,未来这类题目大概率会继续以“至少满足一个条件”的形式出现,比如换成“不能被2、3、5、7整除”或者“能被其中至少两个整除”,难度不会太大,但符号顺序和lcm计算仍是重灾区。暂无足够依据预测具体年份的题型变化,但建议把容斥的“单加、双减、三加”口诀刻在脑子里,遇到多集合问题先画韦恩图确认关系,再套公式,这样基本不会踩坑。