2017-05-19 248 views
0

我已经浏览了各种关于此主题的旧帖子,他们都以某种方式让我感到困惑。所以我会从头开始。PYTHON:查找第n个素数

问题是项目欧拉#7,我是一个相当新的程序员试图解决我的问题。 #7如下。

通过列出前6个素数:2,3,5,7,11和13,我们可以看到第6个素数是13. 第10,001个素数是多少?

我的问题如下。我清楚了解素数以及他们的工作原理。须藤代码我会写这个问题是这样的:

For n in range(3,n) #where n is some very large value. 
if n%i ==0 for i in range(2,n-1) 
return False 
if n%i == 0 for i == n 
return True 

但我觉得我的知识的缺乏,当涉及到Python是阻碍我在寻找我想要的东西。

在我看到的大多数其他解决方案中,它们将n限制在125000之类,并且我真的不知道它们是从哪个数字得出的。

另一个问题是我不知道如何通过范围正确搜索并创建一个满足该关系的值列表,然后我可以检查列表中的最大值。

对我来说最有意义的事情是将每个新素数基本追加到列表中,然后取最大值,但我相信有更好更快的方法来做到这一点。如果你要回答,请包括一个健康的解释剂量,而不要跳入Python技术可能性,请记住,我是编程初学者。

我知道人们处理这类问题的典型方式是促使提问者找到正确的答案,我不想那样做。我希望有人向我展示一个解决方案,然后逐步解释代码的每个部分的作用,以便我不仅可以学习如何解决问题,还可以更好地理解python的工作原理。

谢谢。

+0

有,你不妨来看看在'gmpy2'模块,有一个'next_prime()'方法,你可以用它来获得的第n个素数。或者你可以参考这个答案[最快的方式到列表,所有素数 - 下 - n](http://stackoverflow.com/questions/2068372/fastest-way-to-list-all-primes-below- n) – Pavan

+0

@Pavan我认为他不需要使用适当的包来处理主要的数据包 –

+0

@PhungDuyPhong添加了一个链接,其中存在不同的算法来执行相同的操作,并与其他人进行比较。 – Pavan

回答

1

此任务基本上会要求您收集10001个素数。因此,首先建立一个素数列表,当您到达第10001个数字时显示它。

这里是一个示例代码:

def is_prime(n): 
    for i in range(3, n): 
     if n % i == 0: 
      return False 
    return True 

primes = [] # list of primes 
x = 10001 # go to the nth-number 
n = 2 # start at number 2 

while len(primes) != x+1: # is n-th number on the list? +1 is because list is zero-based 
    if is_prime(n): 
     primes.append(n) # add prime to the list 
    n+=1 # increment n to check the next number 

# print the last item in the list - the n-th number 
print(primes[-1]) 
+0

你可以减少检查只是'n/2'的质数,我认为它会更快 –

+0

你怎么知道你的?我不断看到人们在线说,你可以检查sqrt(n),但我很确定为什么。 –