2017-05-19 70 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),但我很確定爲什麼。 –