我对这个问题感到好奇..
您可以从集合P = {1,2,3,.. n}中选择多少个子集?子集S应满足以下条件:
当您选择x(x∈P,x是集合P的元素)来创建S时,您不能为S选择* x和b * x。
约束:
1 <= n <= 1000
2 <= a < b <= n
b % a != 0 ( b is not divisible by a)
示例:
n = 3 , a = 2, b = 3
so total subsets are 5 ,i.e, {}, {1}, {2}, {3}, {2, 3}
as if in a particular subset there is 1 so 1*2 = 2 and 1*3 cant be there.
so {1,2}, {1,3} and {1,2,3} can't be there
答案 0 :(得分:1)
<强>更新强>
这与OEIS(在线整数序列百科全书)中的 sequence A051026 : Number of primitive subsequences of {1, 2, ..., n} 有关。
我认为没有任何简单的方法来计算这些条款。即使递归计算也不是微不足道的,除非n
是素数,其中:
a(n) = 2 * a(n-1) - 1
这里的问题和“A051026”都可以被认为是上述序列概括的子问题。 “A051026”是(a,b,..) = (2,3,4,5...)
的实例,例如“所有整数&gt; = 2”。
答案 1 :(得分:0)
我相信计算互补更容易 - 即不允许的S子集数量。这是S
的子集数量,每个子集至少有一对(a,b)
,a
除以b
。在你计算出这个数字之后,M'只是从2个 n 的S子集总数中减去它。
现在要计算不允许S
的子集数量,您必须应用inclusion-exclusion principle。解决方案不是很容易实现,但我认为没有替代方法。