这段代码(Python2.7)中发生了什么?

这段代码(Python2.7)中发生了什么?,python,Python,我收到了一份作业,我必须找到所有素数的总和,最大为200万,而我最初编写的代码运行时间太长,所以老师给了我这个算法来检查这个数是否为素数。然而,我似乎不太明白returnall语句中发生了什么,以及它与素数的关系,因为我对你不好。让我多做一点努力,给你解释一下 首先读一读: 让我们看看这里发生了什么 第一步。如果n%2==0且n>2 检查该数字是否可被2整除,并且是否大于2。如果这些条件失败,则该数字不是素数。不要继续,返回false 步骤2a。intmath.sqrtn+1 计算可能是浮点数

我收到了一份作业,我必须找到所有素数的总和,最大为200万,而我最初编写的代码运行时间太长,所以老师给了我这个算法来检查这个数是否为素数。然而,我似乎不太明白returnall语句中发生了什么,以及它与素数的关系,因为我对你不好。让我多做一点努力,给你解释一下

首先读一读:

让我们看看这里发生了什么

第一步。如果n%2==0且n>2 检查该数字是否可被2整除,并且是否大于2。如果这些条件失败,则该数字不是素数。不要继续,返回false

步骤2a。intmath.sqrtn+1 计算可能是浮点数的平方根,将其转换为int,然后加1

步骤2b。范围3,intmath.sqrtn+1,2 创建一个从3开始到步骤2a中计算的值的列表,步长为2。所以基本上它会得到从3到步骤2a的所有奇数。为什么只是奇怪?因为偶数不是最好的

步骤2c。n%i代表范围3中的i,intmath.sqrtn+1,2 在这一步中,我们对2b中创建的列表进行迭代,并将n除以所有这些数字,这里的除法是取模,我们将结果存储在迭代器对象中

步骤2d。全部的 如果n可被2b中的任何列表数整除,则0将存储在n%i上。我们知道素数不能被除1和它本身之外的任何数整除。如果我们得到一个0,那么我们就完成了,它不是质数。 仅当所有值均为非零时,all才会返回true。 如。 打印所有[1,2,3,4,5]>True 打印所有[0,1,2,3,4]>False


我希望,现在你明白了。

@MohammadYusufGhazi,正如OP的名声所表明的,他在这个网站上是相当新的。他不应该受到这种批评。永远不要嘲笑挣扎的人,他没有犯罪。试着帮助他,或者忽略他。你的第一个评论比问题本身更糟糕。你的老师给了你一个聪明的解决方案,它使用了Python的真理思想。尝试使用一些ns计算公式。从内部的“math.sqrtn”开始,写下每个步骤。您将看到素数和非素数的模式。@user7229209,欢迎使用堆栈溢出,更多的是基于问答的站点。您所寻求的是对代码片段的某种解释,它超出了本网站的范围。我建议你做一些谷歌搜索来了解其中的进展。你挣扎的时间越长,它就会帮助你很久。这正是你代码中发生的事情。请看这里:
import math
def is_prime(n):
    if n % 2 == 0 and n > 2: 
        return False
    return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))
import math
def is_prime(n):
    if n % 2 == 0 and n > 2: 
        return False
    return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))