关于不含整除关系的最大整数子集大小的技术咨询
关于不含整除关系的最大整数子集大小的技术咨询
嗨,我来帮你梳理这个问题的解法——我们要找的是不超过n的整数中,不存在任何两个数有整除关系的最大子集的大小。
首先得纠正一下你之前举的n=10的例子:评论里也提到了,这个集合里3能整除6、5能整除10,不符合“没有数整除其他数”的要求哦。
这个问题其实有个经典的构造解法,核心思路是:选择所有大于n/2且不超过n的整数。为什么这个子集满足条件呢?因为对于这个区间里的任意两个数a和b(假设a < b),由于a > n/2,那么2a > n ≥ b,也就是说b不可能是a的倍数,自然不存在整除关系。
这个子集的大小计算起来很直观:
- 当n是偶数时,数量是n/2(比如n=10时,就是6到10,共5个数)
- 当n是奇数时,数量是(n+1)/2(比如n=9时,就是5到9,共5个数)
统一用数学符号表示的话,就是⌈n/2⌉(n/2向上取整)。
可能你会好奇,有没有可能构造出更大的子集?答案是不行。因为任何小于等于n/2的数,它的两倍必然落在(n/2, n]这个区间里。如果我们把某个小于等于n/2的数加入子集,就必须去掉它对应的倍数,总数并不会增加,甚至可能减少。比如n=10时,要是把3加进来,就得去掉6,子集大小还是5,没法超过我们之前构造的5个元素的子集。
备注:内容来源于stack exchange,提问作者Teodor Dyakov
相关产品推荐
相关产品推荐

