如何解决超过内存限制以找到第N个素数
我正在解决一个问题(在网站上)以打印第N个素数,其中N是用户输入。该问题将这些限制固定为1s,即512 MB。我写了下面的代码。
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]
我建议您改进此代码,因为它是基本代码。
编辑:我更正了一个变量名。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。