【问题标题】:Determine primes in given range [duplicate]确定给定范围内的素数
【发布时间】:2015-06-10 05:00:22
【问题描述】:

我想使用 Python 来确定指定范围内的所有素数,例如最多 20 个。我有以下代码:

p = [ ]
for i in range(0, 20):
    for x in range(2, i):
        if i%x == 0:
            break
        else:
            p = p + [i]
            break
print p

输出是:

[3, 5, 7, 9, 11, 13, 15, 17, 19]

但是,159 不是素数。我错过了什么?

【问题讨论】:

    标签: python primes


    【解决方案1】:

    else 分支在您找到一个不能被i 整除的数字时执行。在这种情况下,这意味着任何奇数都被添加,因为它们不能被2整除,但所有偶数都是915 可能不是素数,但它们是奇数。

    只有在for 循环测试了范围内的所有整数时才应该添加一个数字,而不是在if 测试失败时添加一个数字。您可以通过 unindenting else 分支来做到这一点,以便它与 for 循环匹配。

    而不是与if匹配:

    for ...:
        if ...:
        else:
    

    匹配for循环:

    for ...:
        if ...:
    else:
    

    因为只有当for 循环使用break 语句结束时才会执行,例如当所有数字都经过测试并且无法除以x

    for i in range(0, 20):
        for x in range(2, i):
            if i%x == 0:
                break
        else:
            p = p + [i]
    

    请注意,break 然后可以从else 套件中删除,因为到那时您不再处于循环中。

    请注意,要找到一个质数,您只需要测试该数的平方根即可;如果x 可以被数字i 整除,那么它也可以被i 的所有除数整除。见Why do we check up to the square root of a prime number to determine if it is prime?

    在列表中添加数字也可以使用list.append() 来完成,这比在另一个列表中使用加法运算符要清晰一些:

    for i in range(20):
        if i < 2:
            continue  # not prime numbers either
        for x in range(2, int(i ** 0.5) + 1):
            if i % x == 0:
                # found a divisor, abort search
                break
        else:
            p.append(i)
    

    演示:

    >>> p = []
    >>> for i in range(20):
    ...     if i < 2:
    ...         continue  # not prime numbers either
    ...     for x in range(2, int(i ** 0.5) + 1):
    ...         if i % x == 0:
    ...             # found a divisor, abort search
    ...             break
    ...     else:
    ...         p.append(i)
    ... 
    >>> p
    [2, 3, 5, 7, 11, 13, 17, 19]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      • 2019-05-22
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多