给定数字K和一组排序的数字。查找集合中是否有任何数字除以

时间:2011-03-01 09:40:47

标签: algorithm generic-programming factorization

给出一个数字k和一组有序数字。查找集合中是否有任何数字除以此数字。

例如,如果k = 8,并且设置为{3,4,5},则4将除以8. 4是答案。

最坏情况解决方案是O(n)。

我们可以做得更好吗?

3 个答案:

答案 0 :(得分:2)

如何对数字进行因式分解(8给出4 2 1)然后搜索给定集合中的因子?您可以使用集合交叉点或二分法搜索因子列表。我认为它会为你提供更快的答案。

答案 1 :(得分:0)

如果k是素数,则它在集合中没有因子而且你已经完成了。否则,k = p * q其中p是k的最小因子。做q的二进制搜索。如果找到了,你就完成了。否则,重构k = p'* q',其中p'是p之后k的下一个最大因子 - 如果没有,你就完成了。否则,继续二进制搜索q' - 注意q'< q,因此您可以使用q的高限继续搜索。继续,直到找到一个因子或者你已经搜索了k的最大因子。这是O(logn)。在k = 8的具体情况下,你首先搜索4,然后搜索2 ...如果两者都没有找到,那么该集合不包含k的除数。

编辑: 嗯......我猜这不是O(logn)。例如,如果列表对于k的每个因子f包含f-1,那么你将不得不连续搜索每个f,每次点击f-1 ......那将是O(n)。

答案 2 :(得分:0)

计算k的gcd和集合成员的乘积。例如,gcd(3 * 4 * 5,8)= 4。