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