Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';第1000个素数代码有什么问题?_Python_Python 2.7 - Fatal编程技术网

Python 什么';第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个素数): 您的问题的

我认为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个素数):

您的问题的解决方案:

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