找到第n个素数

时间:2010-06-12 21:49:37

标签: python math computer-science 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))

2 个答案:

答案 0 :(得分:5)

您需要更改

root=int(sqrt(x))

root=int(sqrt(x))+1

(以9为例,int(sqrt(9))3range(3, 3, 2)[],您确实要测试除以3!)。

从技术上讲,1也不是素数。添加

if(x<=1):
   prime = False

,您将获得与http://www.rsok.com/~jrm/first100primes.html

相同的结果

答案 1 :(得分:1)

与@Braxton在评论中所说的不同,Eratosthenes算法的Sieve可以很容易地适应生成无界素数(例如,作为一个潜在无限的生成器,然后可以根据需要缩减,例如itertools.slict

请参阅this recipe了解Python中无限制的Sieve(并确保应用评论中显示的增强功能,包括我的;-)或查看最终为打印的Cookbook编辑的相同配方here (不幸的是,讨论部分在这个谷歌书籍中受到了限制,但至少解决方案的代码就在那里; - )。