2013-05-16 38 views
0

有人能解釋部分只是沒了感覺我

for k in range(2, 1+int(sqrt(i+1))): 

給我嗎?我很難理解如何

1+int(sqrt(i+1) 

真正的作品。

據我所知1被添加到i,它是平方根,它必須是一個整數。但我不理解如何達到整個計劃的目標

from math import sqrt 

count = 1 
i = 1 
while count < 1000: 
    i += 2 
    for k in range(2, 1+int(sqrt(i+1))): 
     if i%k == 0:  
      break 
    else: 
     # print(i) , 
     count += 1 
     # if count%20==0: print "" 
print i 

其目標是找到第1000個素數。

+0

對於任何給定的複合數n,我們可以證明它的至少一個素因子必須小於或等於√n。 (我不知道這個衆所周知的事實的名稱,但它幾乎沒有什麼證明,因爲任何大於sqrt(n)的素因必須具有小於或等於它的對應因子)。 所以這個幼稚的方法是簡單地實現這裏所描述的算法: http://en.wikipedia.org/wiki/Prime_number#Trial_division 另外請注意,「其他」接近上一個Python循環是對的情況下,像這是正在執行搜索的地方。搜索因子或增加計數。 –

回答

6

如果一個數字要進行素數測試,測試所有因素至sqrt(數字)就足夠了,因爲sqrt(數字)以上的任何因子都有一個低於sqrt(數字)的相應因子。

例如如果要測試36是否爲素數,則測試多達6個就足夠了 - 例如,12是36的因子,但是其他因子是3,到那時您已經測試過了。