我遇到了这个问题。我无法找到最佳算法。
问题是 :
给定一个L
自然数列表(数字可以非常大)和一个数字N
,确定除数的数量N
不会除以列表中存在的任何数字的最佳算法是什么L
。列表中的数字可以是重复的,即一个数字可以出现不止一次。
观察:
的某个除数d
的除数N
也是 的除数N
。
我的方法是:
- 求 的除数
N
。 - 以相反的顺序对 L 进行排序(最大的元素是第一个元素)。
- 的foreach 除数
d
,N
我检查它是否划分列表中的任何元素。(当您检查小于d
列表中的元素时停止,因为列表已排序) - 如果
d
除以列表中的某个数字L
,那么我不检查 的任何除数d
,也就是说,我跳过此检查。 - 最终,既未除列表中的任何数字也未跳过的左除数被计算在内。这个计数是最终的答案。
但是这个算法对于这个问题并不是最优的。
有更好算法的想法吗?