isPrime功能;需要解释范围()

时间:2017-08-12 21:27:14

标签: python

这个问题被问了几百次,但我需要在特定部分解释我在网上找到的答案:

# prime numbers are only divisible by unity and themselves
# (1 is not considered a prime number by convention)
def isprime(n):
    '''check if integer n is a prime'''
    # make sure n is a positive integer
    n = abs(int(n))
    # 0 and 1 are not primes
    if n < 2:
        return False
    # 2 is the only even prime number
    if n == 2: 
        return True    
    # all other even numbers are not primes
    if not n & 1: 
        return False
    # range starts with 3 and only needs to go up the squareroot of n
    # for all odd numbers
    # ************THIS SECTION************
    for x in range(3, int(n**0.5)+1, 2):
        if n % x == 0:
            return False
    return True
    #*************************************

有人可以解释一下这部分的工作原理吗?我知道range()中的值是start,stop,step。所以我们假设我们使用17作为n。起始值为3且(n ** 0.5)+ 1 = 5.12,这将是我们的停止值。由于步长值为2,x将为1.然后我们进入if n%x == 0:部分,并插入我们得到的值17%1 == 0:结果为True,所以我们返回False。我哪里出错?

1 个答案:

答案 0 :(得分:0)

循环首先将x设置为3,然后测试n当除以3时是否有余数。

如果不是,那就不是素数。

如果是,则循环将x增加2(步长值),因此现在x为5。

将n的值除以5以查看是否有余数。

如果不是,那就是素数。

如果是,我们再次回到循环,x = 7然后x = 9等。

循环仅检查奇数到平方根加上n中的一个,因为因子总是在平方根的任一侧成对出现。如果在平方根之前没有因子,则它是素数。