簡體   English   中英

求素數的第n個

[英]Finding the nth number of primes

我不知道為什么這行不通。 請幫我

from math import sqrt

pN = 0 
numPrimes = 0
num = 1

def checkPrime(x):
   '''Check\'s whether a number is a prime or not'''
   prime = True
   if(x==2):
      prime = True
   elif(x%2==0):
      prime=False
   else:
      root=int(sqrt(x))
      for i in range(3,root,2):
         if(x%i==0):
            prime=False
            break
   return prime

n = int(input("Find n number of primes. N being:"))

while( numPrimes != n ):
   if(  checkPrime( num ) == True ):
      numPrimes += 1
      pN = num
      print("{0}: {1}".format(numPrimes,pN))
   num += 1

print("Prime {0} is: {1}".format(n,pN))

你需要改變

root=int(sqrt(x))

進入

root=int(sqrt(x))+1

(以9例如, int(sqrt(9))3 ,和range(3, 3, 2)[]真的想測試除以3 !)。

從技術上講,1也不是質數。

if(x<=1):
   prime = False

並且您將獲得與http://www.rsok.com/~jrm/first100primes.html相同的結果

與@Braxton在評論中所說的不同,Eratosthenes的Sieve算法可以輕松地生成無界素數(例如,作為一個潛在的無限生成器,然后可以根據需要通過itertools.slict進行縮減)。

請參閱此食譜以獲取Python中無限制的篩子(並確保應用注釋中顯示的增強功能,包括我的;-),或在此處查看與最終為印刷版食譜編輯過的食譜相同的食譜(不幸的是,討論部分已在此google中進行了縮減)暢銷書,但至少解決方案的代碼都在那里;-)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM