查找数组中的最小整数,它是所有先前整数的除数

时间:2014-12-04 16:08:24

标签: algorithm optimization language-agnostic number-theory

我一直在解决前几年的练习考试问题,我遇到了一个问题,如果没有我不了解的数论关系,我/我怀疑/我无法解决。

问题是:

  

给定N个整数的数组,找到最小的整数,它是除数   所有以前的整数。

现在的问题是,如果我无法缓存模运算中的任何结果,那么复杂性就会变为O(n ^ 2),运行速度不够快,无法通过问题的自动测试,因为有时间限制和潜在的300万元素。

当且仅当d | f(d,g [a1,a2,a3,a4,...,an]))为真时,是否存在任何f和g? a1,d | a2,d | a3,...,d |一个?如果没有,你们对这个问题的处理方法有什么其他建议吗?

感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

an除以前所有的元素,当且仅当它除以这些元素的最大公约数时。

因此,您需要跟踪gcd(a1, a2, ..., an)an的最低an | gcd(...)

答案 1 :(得分:0)

离开这里:

我解决了这个问题,注意到如果我们从第i个元素开始并连续检查前面的元素直到第j个,那么之间的所有元素都是第i个元素的倍数。如果条件不适用于所有先前的元素,那么如果我们从元素i-1到j开始,它也不会成功。我们可以从第j个元素重新开始并重复该过程。因此,从最后一个元素开始,我们保证找到解决方案。这也需要找到最小的解决方案,因为所有其他解决方案必须包含在前面的元素中,并且它们必须是第一个解决方案的倍数。