是否值得记住素性测试?

Is it worth memoising a primality test?

我有另一个回溯挑战,我必须得到所有可能的质数组合,这些组合加起来等于某个数。我从Wikipedia开始用通用算法完成了任务,但是100这个数字,用了一个多小时到运行,到[=13]还没结束=].我在想:memoisation(你怎么拼写?)会显着提高算法的性能吗(比如,它会不会让它明显更快)?我正在使用 C++,函数被调用了很多次。我正在使用递归回溯,我似乎记得它对于简单的问题大约是 O(n!)。

在函数外部创建一个数组以检查优先级并从中可访问。全局或静态,取决于使用的语言。该数组将包含所有找到的主要数字。

If the number in question is in the array, return true. 
if number is less or equal than squared max number in the array, return false.
Check for divisibility for all known primaries
if the number is primary, write it into array and return true
return false

添加很简单。这样做并检查更改的时间。