为什么将2视为素数?

时间:2019-01-08 12:15:18

标签: python

我一直在寻找答案,但是找不到这个问题。我对break语句中python文档(教程的4.4)中的以下代码感到困惑。该代码可以正常工作,但是为什么发现2是质数呢?在第一次运行时,似乎n%x为2%2 == 0?关于范围如何迭代,我缺少什么?

for n in range(2, 100):
    for x in range (2, n):
        if n % x == 0:
            print(n, 'equals', x, '*', n//x)
            break
    else:
        print(n, 'is prime')

其他类似代码首先排除了2,因为它是“特殊”素数,我无法弄清楚如果不这样做,该代码将如何消失。

2 个答案:

答案 0 :(得分:3)

如果n为2,则range(2, n)中没有2。这是一个空范围。

range(a,b)贯穿于大于或等于a且严格小于b的整数。

在您的程序中,语句

if n % x == 0:
    ...

处于给定范围内每个x运行的循环中。如果范围为空,则循环执行0次,因此不检查任何因素。

答案 1 :(得分:1)

range()认为第一个限制为包括性,而第二个限制为排除性。因此,当第一次迭代运行时,range(2, 2)不会返回任何元素。因此,不进行任何检查,将2视为素数。