【发布时间】:2012-05-08 10:13:59
【问题描述】:
有没有一种算法可以快速确定一个数字是否是给定数字集的一个因子?
例如,12 是 [24,33,52] 的一个因子,而 5 不是。
有没有比线性搜索更好的方法O(n)?该集合将包含几百万个元素。我不需要找到号码,只需一个 true 或 false 结果。
【问题讨论】:
-
听起来您正在寻找整数分解。 AFAIK,这不是在量子计算之外存在多项式时间解决方案的问题。
-
这个集合是有序的吗?集合元素的范围是否受到任何限制?最佳算法始终取决于对数据的良好了解,如果您了解更多,请告诉我们。
-
集合可以排序。元素的范围在 0 - 10^12 之间。
-
集合和数字仅在运行时可用,还是其中之一或两者都可以在运行前处理?
-
“一个数字”是指要查找这样的数字还是要测试一个特定的数字?前者目前没有 Tony The Lion 建议的多项式算法。在后一种情况下,最佳算法取决于您是只测试一次、针对常数集测试多个潜在因素还是针对多个集合测试一个潜在因素。
标签: algorithm math language-agnostic