我试图编写一些代码来计算千分之一的素数,当我认为我已经完成时,我试图运行它,但什么也没发生。根据代码,我不会得到错误或任何应该发生的事情,只是没什么。如果重要的话,我在Windows PowerShell中运行它。代码如下。 (Python 2.7)
n = 1
all_odd_integers = 2*n+1
prime_number = 2 #cause 3 is the second prime
while prime_number < 1000: #a while loop to get to prime thousand
for i in range (2, (all_odd_integers-1)): #because I want to divide all_odd_integers by all numbers except 1 and itsself and nothing bigger, but bigger than 0
if all_odd_integers % i == 0:
n += 1
print "not a prime" #because, like, if a number can be divided without a reminder it's not a prime
else:
n = n+1
prime_number += 1
print "a prime" #because exactly the opposite of the if-clause, here there is a reminder so prime
if prime_number == 1000:
print "the thousandth prime is %d" (all_odd_integers)
答案 0 :(得分:1)
由于您的while
循环甚至没有执行,因此您的代码无效for
循环,因此您的代码无效。然而,你几乎有办法计算素数。
如果您希望打印出当前代码的每个素数,如果它有效,您可以更轻松地实现这样的事情:
counter = 1
prime = 3
while counter != 1000:
for x in range(2,prime):
if prime%x == 0:
break
else:
print(prime)
counter += 1
prime += 2
或者,如果你只打算打出千分之一的素数,我确信有太多更有效的方法,但我会倾向于这样的东西,以简化和体面的效率:
from math import sqrt
counter = 1
prime = 1
while counter < 1000:
prime += 2
for x in range(2,int(sqrt(prime+1)) + 1):
if prime%x == 0:
break
else:
counter += 1
print (prime)
答案 1 :(得分:0)
while循环中的条件始终为true。 prime_number
永远不会改变。再看一下你的代码
for i in range (2, (all_odd_integers-1)):
如果n=1
因此all_odd_integers-1 = 2
应该做什么?
永远不会执行此循环下的代码。
编辑:
要遍历奇数整数,只需执行以下操作:
for i in xrange(1,1000,2):
答案 2 :(得分:0)
我认为你太难以考虑这个问题了。你的代码有一些错误,但实际上它可以归结为:
counter = 1
n = 2
while True:
n += 1
if all(n % i for i in xrange(2, n)): counter += 1
if counter == 1000: break
print "the thousandth prime is {0}".format(n)
这循环遍历2和它们之间的所有数字,以查看当n除以它们时是否有任何数字返回0余数。如果没有,它是一个素数,计数器会被勾选,如果没有,那么它会继续下一个数字。一旦找到1000个素数,它就会中断并打印the thousandth prime is 7919
您的代码有些问题:
all_odd_integers
永远不会改变。因此,当你执行for i in range(2, (all_odd_integers-1))
时,它将永远不会运行除for i in range(2, 2)
之外的任何内容,因为范围排除了较高的数字。 all_odd_integers = 2*n+1
只运行一次,在all_odd_integers
定义时,n
执行时不会更改。素数(或素数)是一个大于1的自然数,除了1和它本身之外没有正除数。
如果n为3,则all_odd_integers为7?为什么3需要除以4-6?
prime_number
是否等于1000
,因为这就是代码块崩溃的原因。答案 3 :(得分:0)
与其他anwserers一样,while循环中的条件永远不会改变。
查看您的range()
电话:
range (2, (all_odd_integers-1))
当你调用范围时,有一个开始(2
)和一个停止(all_odd_integers-1)
。
range(1,5)
生成:1,2,3,4
查看all_odd_integers
:
all_odd_integers = 2*n+1
2*n+1
表示2*1+1
,因为n = 1
因此2*n+1 = 3
因此您正在调用range(2,2)
,而[]
会给出def odd_integers():
odd_integers = []
for i in xrange(1001):
if i/2 != int(i/2);
odd_integers.append(i)
return odd_integers
,然后循环永远不会执行所有
编辑:更多内容
此函数为您提供奇数整数。
for
这是您的新for i in odd_integers():
:
{{1}}
答案 4 :(得分:0)
如果你从n = 2和prime_number = 3开始怎么办?那样你就可以到达for循环。