0

我正在阅读 Jeff Knupp 的博客,发现了这个简单的小脚本:


import math

def is_prime(n):
    if n > 1:
        if n == 2:
            return True
        if n % 2 == 0:
            return False
        for current in range(3, int(math.sqrt(n) + 1), 2):
            if n % current == 0:
                return False
        return True
    return False

print(is_prime(17))


(注意:我在开头添加了导入数学。您可以在此处查看原文:http: //www.jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained / )

这一切都非常简单,我得到了大部分,但我不确定他使用 range 函数发生了什么。我从来没有以这种方式使用过它,也没有见过其他人以这种方式使用它,但是我是初学者。range 函数具有三个参数意味着什么,以及如何完成素数测试?

另外(如果这是一个愚蠢的问题,请道歉),但最后一个'return False'声明。就是这样,如果将一个数字传递给小于一的函数(因此不能是素数),该函数甚至不会浪费时间评估该数字,对吗?

4

2 回答 2

1
import math #import math module

def is_prime(n): #define is_prime function  and assign variable n to its argument (n = 17 in this example).
    if n > 1: #check if n (its argument) is greater than one, if so, continue; else return False (this is the last return in the function).
        if n == 2: #check if n equals 2, it so return True and exit.
            return True
        if n % 2 == 0: #check if the remainder of n divided by two equas 0, if so, return False (is not prime) and exit. 
            return False
        for current in range(3, int(math.sqrt(n) + 1), 2): #use range function to generate a sequence starting with value 3 up to, but not including, the truncated value of the square root of n, plus 1. Once you have this secuence give me every other number ( 3, 5, 7, etc)     
            if n % current == 0: #Check every value from the above secuence and if the remainder of n divided by that value is 0, return False (it's not prime)
                return False
        return True #if not number in the secuence divided n with a zero remainder then n is prime, return True and exit.  
    return False

print(is_prime(17))
于 2013-08-22T12:26:03.497 回答
1

第三个是步骤。它遍历每个小于或等于输入平方根的奇数(3、5、7 等)。

于 2013-08-22T03:34:25.693 回答