所以我试图为GIMPS编写一个python脚本(查找mercenneprimes),但每次运行它时,它都会崩溃。有没有办法我可以改变它,这样它就不会占用这么多CPU了?脚本如下:
n = 77232917
restart = True
y = range(2,0.5*n - (n%2))
def restart_for(d):
for x in d:
if (2**n - 1) % x == 0:
n += 1
break
elif x == 0.5*n - (n%2):
print n
n += 1
if restart == True:
restart_for(range(2,0.5*n - n%2))
restart_for(range(2,0.5*n - n%2))
注:我从77000000开始,因为那是最后一个质数
这个程序永远不会结束,而且总是崩溃。 由于
restart
总是True
,它将以无限循环的方式继续,直到内存耗尽或达到最大入侵深度。在即使没有这一点,我想知道整个算法是怎么做的:你总是用相同的定义范围调用函数}-循环的迭代都会将其增加1。
这意味着
restart_for()
,这只依赖于n
。n
不可能减少,因为每次{n
将在一段时间后变得太大。在由于函数不断地调用自己,它将在某个时刻耗尽RAM,因为以前对该函数的每次调用的所有数据仍然存储在内存中(如果函数是}在RAM中不再存在。因为内存不足,Python决定删除它认为不再需要的任何内容,以便腾出更多空间。由于
while
-循环,则不会发生这种情况)。 这也解释了上面描述的错误,即代码告诉您没有定义n
:这是因为{n
是所有变量中定义时间最长的,因此它首先删除了这个变量。在有一种技术涉及到删除代码块,直到发现哪个部分破坏了整个程序。在
试着把素数改成最小的素数,递增直到它断裂。这会让你很清楚是什么破坏了它。如果没有,尝试改变寻找素数的算法,并确保方程和语句也是正确的。如果这不起作用,试着移除elif,然后如果它仍然断裂,则移除If。向后看,直到你发现它什么时候起作用。一旦你发现程序运行,你就会知道你取出的代码块是问题所在,你可以看看这个代码块是如何编写的。在
所有这些都是开发人员的工作。否则,你就等着成为客户了。在
相关问题 更多 >
编程相关推荐