我正试图为这个问题得到一个公认的答案:http://www.spoj.com/problems/PRIME1/ 这并不是什么新鲜事,只是希望在两个给定的数之间生成素数。最后,我编写了以下代码。但是spoj给了我运行时错误(nzec),我不知道该如何处理。我希望你能帮我。提前谢谢。在
def is_prime(m,n):
myList= []
mySieve= [True] * (n+1)
for i in range(2,n+1):
if mySieve[i]:
myList.append(i)
for x in range(i*i,n+1,i):
mySieve[x]= False
for a in [y for y in myList if y>=m]:
print(a)
t= input()
count = 0
while count <int(t):
m, n = input().split()
count +=1
is_prime(int(m),int(n))
if count == int(t):
break
print("\n")
查看问题定义:
看看你的代码:
因此,如果},那么您将尝试创建一个包含10000000001个布尔值的列表。这意味着您要求Python为十亿个指针分配存储空间。在64位平台上,对于Python来说,这是8GB的容量,但是很可能会让您的系统陷入交换地狱,或者被限制或看门狗杀死。在32位平台上,这是4GB,这将保证您获得
n
是{MemoryError
。在该问题还明确显示以下警告:
所以,如果你想用这种方式实现它,你就得想出一个更紧凑的存储器。例如,^{} 只需要1GB,而不是4或8。如果你用比特而不是字节来存储它,你可以让它变得更小(128MB),但这并不是对代码的简单更改。在
计算两个数之间的质数是没有意义的。在你找到一个素数之前,只能用其他素数来计算。在
下面是一个python代码和一些计算素数,您可以继续使用它们:
这段代码有点微不足道,但工作正常,测试良好。在
相关问题 更多 >
编程相关推荐