Python 超出内存限制以查找第N个素数

Python 超出内存限制以查找第N个素数,python,python-3.x,Python,Python 3.x,我正在解决一个问题(在一个网站上),打印第N个素数,其中N是用户输入。该问题修复了1s、512MB的限制。我写了下面的代码 n = int(input()) r = (n+1)**2 nth = n - 1 d = [x for x in range(2, r)] non_prime = [] for i in range(2, r): for x in d: if i % x == 0 and x != 1 and x != i: non_pri

我正在解决一个问题(在一个网站上),打印第N个素数,其中N是用户输入。该问题修复了1s、512MB的限制。我写了下面的代码

n = int(input())
r = (n+1)**2
nth = n - 1
d = [x for x in range(2, r)]
non_prime = []
for i in range(2, r):
    for x in d:
        if i % x == 0 and x != 1 and x != i:
            non_prime.append(i)


non_prime = list(set(non_prime))
prime_numbers = [x for x in d if x not in non_prime]
print(prime_numbers[nth])
现在代码工作正常,但提交后表示超出了内存限制。如何在不过度更改代码的情况下解决此问题??


(我知道有更简单的方法来解决这个问题,但我是自己解决的。)

您使用的方法检查每个数字,直到给定数字的平方。我发现在列表中添加素数并检查其长度要容易得多。使用这种方法,它检查的数字很少,运行速度也很快

def getPrime(num):
    arr = []
    x = 2
    while len(arr) < num:
        prime = True
        for divisor in range(2, x):
            if x % divisor == 0 and prime == True:
                prime = False
        if prime == True:
            arr.append(x)
        x += 1
    return arr[num - 1]
def getPrime(num):
arr=[]
x=2
而len(arr)
我鼓励您改进此代码,因为它是初步的


编辑:我更正了一个变量名。

与其跟踪非素数,不如跟踪素数?我不知道如何跟踪素数,我只是键入任何需要的内容来获得素数列表。跟踪素数的方法与跟踪非素数的方法相同,除了素数要少得多,这样就不会耗尽内存之外,我不知道如何运行您提供的代码,因为我不能只将一个num传递给getprime,因为它使用return语句,所以您必须在print函数中运行它才能看到结果。或者,您可以使用函数声明一个变量,并在以后使用该变量。抱歉,我在return语句中使用了错误的变量,我正在逐行转录代码,并且使用了不同的变量名。