查找素数而不使用def()?

时间:2018-10-14 02:34:46

标签: python primes

在范围内查找质数似乎有很多答案都涉及到定义函数,但是我不明白为什么我下面的内容不起作用?

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),但是我却得到了上面的错误。

3 个答案:

答案 0 :(得分:4)

x=int in range(2,num)False,因为类型int不在2num的范围内。 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))