在范围内查找质数似乎有很多答案都涉及到定义函数,但是我不明白为什么我下面的内容不起作用?
for num in range(3,1000):
x=int in range(2,num)
if num%x!=0:
print(num)
我得到的错误是
Traceback (most recent call last):
File "C:/Users/Jack/PycharmProjects/beginnerworkeraseanddoanything/venv/numbers.py", line 4, in <module>
if num%(x)!=0:
ZeroDivisionError: integer division or modulo by zero
这对我来说没有意义。我觉得我应该得到一个与以下事实有关的错误:我的代码中的数字可以为真也可以为假(即10%5为0,而10%3为1),但是我却得到了上面的错误。
答案 0 :(得分:4)
x=int in range(2,num)
为False
,因为类型int
不在2
到num
的范围内。 False
只是0的奇特名称,因此num%x
被零除。您的错误与不在函数中这一事实无关。
我不确定您要使用x=int in range(2,num)
做什么,所以我不能真正建议如何解决它。
答案 1 :(得分:3)
我认为您想要的是:
for i in range(3, 100):
for j in range(2, i):
if i % j == 0:
break
else:
print(i)
但是使用这种方法查找质数太慢(也错过了质数2)。 您可以使用generator在python中找到素数。 通过这种方式
def _odd_iter():
n = 1
while True:
n += 2
yield n
def _not_divisible(n):
return lambda x: x % n > 0
# prime number generator
def primes():
yield 2
iter = _odd_iter()
while True:
n = next(iter)
yield n
iter = filter(_not_divisible(n), iter)
def generate_primes_list(n):
primes_list = []
for prime in primes():
if prime < n:
primes_list.append(prime)
else:
break
return primes_list
答案 2 :(得分:0)
Kindall的答案是正确的答案,这是您得到错误的原因。如果您尝试查找素数“未定义任何函数,即未使用def()”,则可以尝试我之前写的这段代码:
top= 1000
primes=[]
for i in range(2,top): #start from 2 to max number
add=True
for j in range(1,int(math.sqrt(i))+1):
"""
property of primes, refer to number theory:
https://math.stackexchange.com/questions/63276/is-a-prime-factor-of-a-number-always-less-than-its-square-root
"""
if(j!=1 and i!=j and i%j==0): #this could have been done better
add=False
break
if(add):
primes.append(i)
print (primes)
print (len(primes))