是否值得记住质数测试?

Posted

技术标签:

【中文标题】是否值得记住质数测试?【英文标题】:Is it worth memoising a primality test? 【发布时间】:2018-01-19 07:48:25 【问题描述】:

我还有另一个回溯挑战,我必须得到所有可能的素数组合,这些组合加起来等于某个数字。我已经使用Wikipedia的通用算法完成了任务,但是对于数字100,运行了一个多小时,到下课还没有完成。我想知道:记忆化(你怎么拼写?)会显着提高算法的性能(比如,它会不会让它明显更快)?我正在使用 c++,并且该函数被调用了很多次。我正在使用递归回溯,我似乎记得对于简单的问题大约是 O(n!)。

【问题讨论】:

您为绩效评估或检查做了哪些工作?您必须在此处输入您自己的开始和结果 我真的不知道如何...我使用的是学校计算机,Windows 10 和 code::blocks 13.10。 在当前表格中,您的问题是被禁止的。有人已经投票支持关闭......当您的解决方案出现问题时,您可以寻求建议甚至帮助,但您不能要求我们完成您的工作。这对你来说也是一个糟糕的服务......你应该在这里写下你是如何计算算法的复杂性的,以及你在什么时候卡住了。或者你如何衡量程序的真正复杂性。并将代码放在这里。两种方式都可以。但是您必须自己为任务做一些事情。购买计算机和操作系统/框架安装是不够的。 @Gangnus 我的意思是我没有像time 这样的简单unix 实用程序可用(据我所知),并且不知道IDE 是否有任何方法。跨度> 没有办法告诉我们如何改进一个只有你知道它的样子的程序。这里有些人是非常优秀的程序员,但即使在这里,也没有人通灵。 【参考方案1】:

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

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

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

【讨论】:

为什么是外部的,为什么不是静态的? C++ static 完全没问题。

以上是关于是否值得记住质数测试?的主要内容,如果未能解决你的问题,请参考以下文章

100以内的质数

100以内的质数

求50到100以内的质数

算法之求质数(Java语言)

P5440 XR-2奇迹

C++质数判断算法的时间测试