我无法弄清楚为什么这不起作用。请帮帮我
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))
答案 0 :(得分:5)
您需要更改
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
相同的结果
答案 1 :(得分:1)
与@Braxton在评论中所说的不同,Eratosthenes算法的Sieve可以很容易地适应生成无界素数(例如,作为一个潜在无限的生成器,然后可以根据需要缩减,例如itertools.slict
)
请参阅this recipe了解Python中无限制的Sieve(并确保应用评论中显示的增强功能,包括我的;-)或查看最终为打印的Cookbook编辑的相同配方here (不幸的是,讨论部分在这个谷歌书籍中受到了限制,但至少解决方案的代码就在那里; - )。