Python 试图找到第1000个素数

Python 试图找到第1000个素数,python,primes,Python,Primes,我正试图用python编写一个脚本来查找第1000个素数。我不明白为什么这不管用。基本上,虽然mod小于数字的平方根,并且仍然有余数,但mod会上升1。这应该持续到mod等于该数字的平方根为止。然后,检查应保持在0,数字应为素数。每次我尝试运行脚本时,它都会告诉我有一个系统错误 import math b=2 count=2 next_odd=3 next_prime=1 check = 0 while count<=10: while b<float(math.sqrt(

我正试图用python编写一个脚本来查找第1000个素数。我不明白为什么这不管用。基本上,虽然mod小于数字的平方根,并且仍然有余数,但mod会上升1。这应该持续到mod等于该数字的平方根为止。然后,检查应保持在0,数字应为素数。每次我尝试运行脚本时,它都会告诉我有一个系统错误

import math
b=2
count=2
next_odd=3
next_prime=1
check = 0

while count<=10:
    while b<float(math.sqrt(next_odd)):
        if next_odd%b>0:
                b+=1
        if next_odd%b == 0:
                check+=1
    if check > 0:
        next_prime=next_odd
        next_odd+=2
        print(next_prime)
        b=2
        count+=1`
导入数学
b=2
计数=2
下一个奇数=3
下一个素数=1
检查=0
计数为0时:
下一个素数=下一个奇数
下一个奇数+=2
打印(下一个素数)
b=2
计数+=1`

我理解您的意图,但不幸的是,您的程序有太多问题。这是一个工作版本。我做了最小的改变。希望您能将下面的版本与自己的版本进行比较,看看哪里出了问题

import math

count=2
next_odd=3
next_prime=1

while count<=1000:
    b=1
    check = 0
    while b<float(math.sqrt(next_odd)):
        b+=1
        if next_odd%b == 0:
            check+=1
    if check == 0:
        next_prime=next_odd
        print(next_prime)
        count+=1
    next_odd+=2
导入数学
计数=2
下一个奇数=3
下一个素数=1

虽然count我理解您试图做什么,但不幸的是,您的程序有太多错误。这是一个工作版本。我做了最小的改变。希望您能将下面的版本与自己的版本进行比较,看看哪里出了问题

import math

count=2
next_odd=3
next_prime=1

while count<=1000:
    b=1
    check = 0
    while b<float(math.sqrt(next_odd)):
        b+=1
        if next_odd%b == 0:
            check+=1
    if check == 0:
        next_prime=next_odd
        print(next_prime)
        count+=1
    next_odd+=2
导入数学
计数=2
下一个奇数=3
下一个素数=1
而count(首先,我假设代码末尾的勾号是堆栈溢出帖子中的输入错误,而不是代码本身)

考虑一下当
next\u odd
为素数时会发生什么。该区块:

while b<float(math.sqrt(next_odd)):
    if next_odd%b>0:
            b+=1
    if next_odd%b == 0:
            check+=1
有关此代码的几点:

  • 全局范围中没有(非常量)变量。这使得解释脚本的状态如何随时间变化变得更加容易
  • 在while循环上使用for循环可以保证我们的脚本不会因为错误(或未解释的)条件而陷入无限循环
  • for循环的使用意味着我们不必担心自己增加所有变量,这大大减少了我们必须管理的状态量
希望有帮助

哦,注意还有更有效的方法来计算素数。请参见

(首先,我假设代码末尾的勾号是堆栈溢出帖子中的输入错误,而不是代码本身)

考虑一下当
next\u odd
为素数时会发生什么。该区块:

while b<float(math.sqrt(next_odd)):
    if next_odd%b>0:
            b+=1
    if next_odd%b == 0:
            check+=1
有关此代码的几点:

  • 全局范围中没有(非常量)变量。这使得解释脚本的状态如何随时间变化变得更加容易
  • 在while循环上使用for循环可以保证我们的脚本不会因为错误(或未解释的)条件而陷入无限循环
  • for循环的使用意味着我们不必担心自己增加所有变量,这大大减少了我们必须管理的状态量
希望有帮助


哦,注意还有更有效的方法来计算素数。请看

你有一个
`
就在
计数+=1之后
什么“系统错误”?我猜是一个语法错误如果我理解正确,那么如果对于任何b,next_odd%b==0,那么它将导致支票增加到无穷大。
b=2
next_odd=3
<代码>而b
->
而2<1.732
永远不会发生,
b
check
永远不会改变,这是一个无限循环。如果不是语法错误,我不知道什么是系统错误,但是如果你把它放入一个自动检查中,测试它是否有正确的答案,可能它超时了。你有一个
`
就在
count+=1
什么“系统错误”之后?我猜是一个语法错误,如果有b,我理解正确,next_odd%b==0,那么它将导致check递增到无穷大。
b=2
next_odd=3
<代码>而b
->
而2<1.732
永远不会发生,
b
check
永远不会改变,这是一个无限循环。如果不是语法错误,我不知道什么是系统错误,但是如果你把它放到一个自动检查中,测试它是否有正确的答案,可能它超时了。勾号是个错误,对不起!非常感谢,我知道我错在哪里了。滴答声是个错误。对不起!非常感谢,我明白我错在哪里了。