确定最小互质子集的算法

Given a set A of n positive integers, determine a non-empty subset B
consisting of as few elements as possible such that their GCD is 1 and output its size.

For example:
5
6 10 12 15 18

yields an output of “3”, while:

5
2 4 6 8 10

equals “NONE” since no subset can be determined.

所以看起来很基本,但我仍然坚持下去.我对它的看法如下:我们知道在集合中已经存在一些数字的倍数是没用的,因为它们的除数是某个因子k的相同时间而我们正在寻找最小的子数.因此,对于每个ni,我们从进一步的计算中去除k是正int的任何kni.

不过那是我被困的地方.接下来我该怎么办?如果已经存在一些2元素子集,然后是3元素,那么我只能想到一种愚蠢,蛮力的尝试方法,依此类推.我应该以更聪明的方式检查以确定它?

最佳答案 假设每个A,B(两个元素)我们计算它们最大的共同点

除数D.然后我们将这些D值存储在某个地方作为形式的映射:

A,B – > d

假设我们也存储了反向地图

D – > A,B

如果至少有一个D = 1那么我们Go – 答案是2.
假设现在没有这样的D,D = 1.
如果答案是3,应该满足什么条件?
我想这个:
存在两个D值,例如D1和D2,使得GCD(D1,D2)= 1.
对?
所以现在我们把问题转化为了,而不是As和Bs
在所有D的集合上存在相同的问题,我们已经改变了选项
答案的2个答案3答案.对?

我不是百分百肯定只是大声思考.

但这个转变的问题更糟糕了
我们必须存储更多的价值观.
(N元素等级2的组合).

不确定,你提出这个问题似乎很难
问题给我.如果存在,我会感到惊讶
比蛮力更好的方法
并有兴趣知道它.

你需要思考(和寻找)是这样的:
有没有办法表达GCD(a1,a2,… aN)
如果你知道他们成对的GCD.如果有的话
你可以简化一些方法或公式
你的搜索(最小的子集匹配
期望的标准).

另见此链接.也许它会有所帮助.

https://cs.stackexchange.com/questions/10249/finding-the-size-of-the-smallest-subset-with-gcd-1

点赞