【问题标题】:PYTHON: Finding an nth prime numberPYTHON:找到第 n 个素数
【发布时间】:2017-05-19 03:50:03
【问题描述】:

我浏览了有关此主题的各种较早的帖子,它们都以某种方式让我感到困惑。所以我将从头开始。

问题是 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 技术问题的情况下提供健康的解释,请记住,我是编程初学者。

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

谢谢。

【问题讨论】:

  • 有一个gmpy2 模块,你可以看看,有一个next_prime() 方法可以用来获取第n 个素数。或者你可以参考这个答案fastest-way-to-list-all-primes-below-n
  • @Pavan 我认为他想要它而不使用已经处理素数的正确包
  • @PhungDuyPhong 添加了一个链接,其中存在执行相同操作的不同算法并相互比较。
  • 是的,谢谢,我认为这可以标记为重复

标签: python math primes


【解决方案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])

【讨论】:

  • 你可以减少检查是素数只到n/2,我认为它会更快
  • 你怎么知道的?我一直看到网上有人说你可以检查到 sqrt(n),但我很确定为什么。
猜你喜欢
  • 2016-02-01
  • 2017-05-06
  • 1970-01-01
  • 2013-01-22
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多