PYTHON:查找第n个素数
我浏览了很多关于这个主题的老帖子,它们都让我在某种程度上感到困惑。所以我将从头开始 Euler项目的问题是7,我是一个新的程序员,正在努力解决这些问题。7如下 通过列出前六个素数:2、3、5、7、11和13,我们可以看到第六个素数是13。 第10001个素数是什么 我的问题如下。我很清楚什么是素数以及它们是如何工作的。我将为此问题编写的sudo代码如下:PYTHON:查找第n个素数,python,math,primes,Python,Math,Primes,我浏览了很多关于这个主题的老帖子,它们都让我在某种程度上感到困惑。所以我将从头开始 Euler项目的问题是7,我是一个新的程序员,正在努力解决这些问题。7如下 通过列出前六个素数:2、3、5、7、11和13,我们可以看到第六个素数是13。 第10001个素数是什么 我的问题如下。我很清楚什么是素数以及它们是如何工作的。我将为此问题编写的sudo代码如下: For n in range(3,n) #where n is some very large value. if n%i ==0 for i
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 Technobable的情况下提供健康的解释,记住,我是编程初学者
我知道人们处理此类问题的典型方式是催促提问者找到正确答案,我不希望这样。我希望有人向我展示一个解决方案,然后一步一步地讲解代码的每一部分的作用,这样我不仅可以了解如何解决问题,还可以更好地了解python的工作原理
谢谢 此任务主要要求您收集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])
有一个gmpy2模块,你可以看一下,有一个下一个素数方法,你可以用它来得到第n个素数。或者你可以把这个答案提到@Pavan,我想他不需要使用处理质数的合适的包already@PhungDuyPhong添加了一个链接,其中存在用于执行相同操作的不同算法,并相互比较。是的,谢谢,我认为这可以标记为重复。您可以将is prime的检查减少为n/2,我想会快些你怎么知道的?我一直看到网上有人说你可以查到sqrtn,但我很确定为什么。