Python 什么';第1000个素数代码有什么问题?
我认为2,3,5,7已经被称为素数,从10开始 它给出“11是第1000个素数”作为输出。Python 什么';第1000个素数代码有什么问题?,python,python-2.7,Python,Python 2.7,我认为2,3,5,7已经被称为素数,从10开始 它给出“11是第1000个素数”作为输出。 我想在某个地方有一个逻辑错误。143是11*13,所以它不是素数。 你的代码会把它算作素数,因为你只会检查它是否能被前5个素数除。 为了解决你的疑问,我把下一个数乘以素数11和13。 希望能有帮助 顺便说一句,您的代码也是错误的,因为它只在匹配条件时增加“i”,所以当它总是检查时: 如果11%2==0或11%3==0或11%5==0或11%7==0: 代码的解决方案(不计算第1000个素数): 您的问题的
我想在某个地方有一个逻辑错误。143是11*13,所以它不是素数。 你的代码会把它算作素数,因为你只会检查它是否能被前5个素数除。 为了解决你的疑问,我把下一个数乘以素数11和13。 希望能有帮助 顺便说一句,您的代码也是错误的,因为它只在匹配条件时增加“i”,所以当它总是检查时: 如果11%2==0或11%3==0或11%5==0或11%7==0: 代码的解决方案(不计算第1000个素数): 您的问题的解决方案:
count=5 #Nth prime number
i=10 #number to be checked
while (count!=1000): #until its not 1000th
if i%2==0 or i%3==0 or i%5==0 or i%7==0: #to check non prime
pass #next number initialized
else: #for prime
count=count+1 #move to next position
i=i+1
if count==1000: #if is 1000th position
print i-1," is 1000th prime." #print prime
def为素数(n):
如果n==2或n==3:返回True
如果n<2或n%2==0:返回False
如果n<9:返回True
如果n%3==0:返回False
r=int(n**0.5)
f=5
正如其他人在评论中提到的,你判断一个数字是否为素数的标准是非常错误的。您只测试它是否可以被前4个素数整除,但这对于大于120的数字来说是不够的(121可以被11整除,但不能被任何较小的素数整除)。您需要检查之前找到的所有素数(查找“埃拉托斯烯筛”)
另一个问题是,当数字为素数时,您没有递增i
。因此,一旦您到达11
,您将继续递增count
,而不是i
。当count
到达1000
时,您将i
打印为第1000个素数。从if
块中取出i=i+1
,每次都应该这样做
此外,由于偶数永远不能是素数(2除外),因此可以从i=11开始,并将其递增2——不要浪费时间检查偶数。然后你可以把i%2==0
从测试中去掉
你用来计算素数的逻辑是错误的。我认为你们可以存储你们在上一次测试中计算的所有素数,然后通过除以所有先前的素数来测试下一个数,或者仅仅根据素数的定义来测试下一个数
在循环中,若i==11,那个么您将增加计数器,然而,我不会增加,所以对于下面的循环,您将只测试11是否是素数。这就是为什么你把11打印成第1000个数字。实际上,您将打印11作为第n个素数。我认为你应该总是增加I
我想你应该告诉我们这有什么问题,你应该解释为什么你认为这是个问题。你把任何不能被2,3,5或7整除的数字都算作素数,但是有很多非素数不能被这些整除。你需要检查到目前为止发现的所有素数。嗯,是的。没有人说寻找素数是一个计算成本很低的问题。只要想一想当我11岁时循环内部会发生什么。它怎么会达到12?这是不够的,因为这样你就不会得到17*19,以此类推。这里没有一个难编码的解决方法。这并不能解释为什么它说11
是第1000个素数。即使有这个错误,11也只是第5个素数。它应该打印一些大的非素数作为第1000个素数,而不是11个。另外,检查所有的数字直到我可以工作,而不是存储所有的素数?@user8262214可以工作,但是对于非常大的数字,它的效率非常低。你只需要检查小于sqrt(i)
。好的!非常感谢。
count=5 #Nth prime number
i=10 #number to be checked
while (count!=1000): #until its not 1000th
if i%2==0 or i%3==0 or i%5==0 or i%7==0: #to check non prime
pass #next number initialized
else: #for prime
count=count+1 #move to next position
i=i+1
if count==1000: #if is 1000th position
print i-1," is 1000th prime." #print prime
def is_prime(n):
if n == 2 or n == 3: return True
if n < 2 or n%2 == 0: return False
if n < 9: return True
if n%3 == 0: return False
r = int(n**0.5)
f = 5
while f <= r:
if n%f == 0: return False
if n%(f+2) == 0: return False
f +=6
return True
count=5 #Nth prime number
i=10 #number to be checked
while (count!=8): #until its not 1000th
if not is_prime(i): #to check non prime
pass #next number initialized
else: #for prime
count=count+1 #move to next position
i=i+1
if count==8: #if is 1000th position
print i-1," is 1000th prime." #print prime