PYTHON:找到第n个素数

时间:2017-05-19 03:50:04

标签: python math primes

我已经查看了有关此主题的各种较旧的帖子,他们都让我感到困惑。所以我从头开始。

问题是Project Euler上的#7,我是一个相当新的程序员,试图解决问题。 #7如下。

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

我的问题如下。我清楚地了解素数是什么以及它们是如何工作的。我会为这个问题编写的sudo代码是这样的:

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 technobabble,记住,我是编程的初学者。

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

感谢。

1 个答案:

答案 0 :(得分: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])