我在python中编写了下面的代码来打印出素数,但它的输出如下:
3,5,7,**9**,11,13,**15**,17,19,**21**,23,25............99
下面是代码:
def isprime(n):
if n == 1:
return False
for x in range(2, n):
if n % x == 0:
return False
else:
return True
def primes(n = 1):
while(True):
if isprime(n): yield n
n += 1
for n in primes():
if n > 100: break
print(n)
答案 0 :(得分:4)
在数字无法被一个号码整除后,您将返回True
。检查所有数字后,您需要返回true。相反,你应该写
def isprime(n):
if n == 1:
return False
for x in range(2, n):
if n % x == 0:
return False
return True
另一个注意事项:如果您正在测试素数,则只需要测试数字的平方根。如果数字不能被任何小于其平方根的数字整除,那么它也不能被任何更大的数除尽,因此必须是素数。这有助于提高代码的效率。
答案 1 :(得分:1)
您的isprime
函数说:
for x in range(2, n):
if n % x == 0:
return False
else:
return True
这意味着在第一次迭代(当x==2
时),如果n%x
不为零,它将返回True。因此,对于任何奇数(大于1,你跳过),它将返回True。
相反,如果循环中的数字的 none 是因子,则要返回True。
for x in range(2, n):
if n % x == 0:
return False
# the loop finished without returning false, so none of the numbers was a factor
return True