【发布时间】:2017-08-01 18:58:34
【问题描述】:
免责声明:在 SO 上有类似的问题,然而 它们要么都没有解决算法的效率问题,要么是 用不同的语言写成。请参阅this answer 谈话 关于 python 的效率,看看它是否能帮助你回答我的问题。
所以我需要一种最有效的方法来找到任何给定数字的所有因数,这种方法可以快速处理非常大的数字。我已经有几次代码迭代可以工作,但需要很长时间来处理超过 6 个字符的数字。
编辑:根据要求,这里是我的一些非有效方法(为清楚起见,省略了错误检查)
真的很乱:
@IBAction func findFactorsButton(_ sender: AnyObject) {
if let _ = textField.text, !textField.text!.isEmpty {
counter = 1
factors = []
repeat {
counter += 1
if Int(textField.text!)! % counter == 0 {
factors.append(String(counter))
} else {
continue
}
} while counter != Int(textField.text!)
factors.removeLast()
outputLabel.text = factors.joined(separator: ", ")
} else {
outputLabel.text = ""
}
}
不那么凌乱的解决方案(游乐场):
func calculateFactors(n: Int) -> String {
var result: String = ""
for i in 1...n {
guard n % i == 0 else {continue}
result += i == 1 ? "1" : ", \(i)"
}
print(result)
return result
}
【问题讨论】:
-
您能否向我们展示这些迭代,按性能最持久的顺序列出?
-
有效分解单个数字?还是很多?在后一种情况下,您将预先计算素数列表。数字在什么范围内?
-
这里codereview.stackexchange.com/a/166342/35991 是一个应该比你更快的实现。
-
求单个数的因数。 不是主要因素。
-
如何有效地找到所有因素是一个与任何特定编程语言几乎没有关系的算法问题,@SamHarwell 对该问题的回答(由@ColGraff 在此引用)列出了所有解决问题的最佳算法这个问题。当我关闭它时,您的问题中没有 Swift 代码。由于您添加了一些代码,我重新打开了这个问题。
标签: swift algorithm performance