在spoj上提供运行时错误(NZEC)的Python质数代码

2024-10-01 22:40:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图为这个问题得到一个公认的答案: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")

Tags: 答案inforinputifiscountrange
2条回答

查看问题定义:

In each of the next t lines there are two numbers m and n (1 <= m <= n <= 1000000000, n-m<=100000) separated by a space.

看看你的代码:

mySieve= [True] * (n+1)

因此,如果n是{},那么您将尝试创建一个包含10000000001个布尔值的列表。这意味着您要求Python为十亿个指针分配存储空间。在64位平台上,对于Python来说,这是8GB的容量,但是很可能会让您的系统陷入交换地狱,或者被限制或看门狗杀死。在32位平台上,这是4GB,这将保证您获得MemoryError。在

该问题还明确显示以下警告:

Warning: large Input/Output data, be careful with certain languages

所以,如果你想用这种方式实现它,你就得想出一个更紧凑的存储器。例如,^{}只需要1GB,而不是4或8。如果你用比特而不是字节来存储它,你可以让它变得更小(128MB),但这并不是对代码的简单更改。在

计算两个数之间的质数是没有意义的。在你找到一个素数之前,只能用其他素数来计算。在

下面是一个python代码和一些计算素数,您可以继续使用它们:

bzr branch http://bzr.ceremcem.net/calc-primes

这段代码有点微不足道,但工作正常,测试良好。在

相关问题 更多 >

    热门问题