我正在尝试在python中编写一个脚本来查找第1000个素数。我不明白为什么这不起作用。基本上,当mod小于数字的平方根并且仍有余数时,mod上升一。这应该继续,直到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`
答案 0 :(得分:2)
我明白你要做什么,但不幸的是你的程序有太多问题。这是一个工作版本。我做了很小的改动。希望您可以将以下版本与您自己的版本进行比较,看看您哪里出错了。
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
通过上述程序,第1000个素数可以成功确定为7919。
答案 1 :(得分:2)
(首先,我假设您的代码末尾的刻度是堆栈溢出帖子中的拼写错误,而不是代码本身)
考虑comment
素数时会发生什么。这个块:
next_odd
将while b<float(math.sqrt(next_odd)):
if next_odd%b>0:
b+=1
if next_odd%b == 0:
check+=1
增加到b
的平方根,而不会增加next_odd
。这意味着check
不会通过,因此if check > 0:
永远不会递增,然后您只需在count
中旋转,跳过两个
while count<=10:
块,因为他们的条件是假的。
换句话说,当if
为素数时,你实际上并没有说要做什么。这也是为什么next_odd
当你想要做的就是通过数字递增时才能真正使用的原因(这就是你在这里使用它的原因)。尝试这样的事情:
while
有关此代码的几点意见:
希望有所帮助!
哦,请注意,还有更有效的计算素数的方法。见https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes