我的任务是返回整数(n)的素数。
我的问题是我该如何用数学表达式来表示编码?
我知道素数是只能被1本身整除的数字,但不知道如何将其放入代码中。

但是,我确实找到了这种编码有效,但是我不知道为什么:

def primes(n):

    primfac = []
    d = 2
    while d*d <= n:
        while (n % d) == 0:
            primfac.append(d)
            n //= d
        d += 1
    if n > 1:
       primfac.append(n)
    return primfac


有人可以向我解释为什么这种编码有效吗?为什么选择d作为2开始而不是1?另外,为什么他平方d并检查其是否等于或小于n?等等。

最佳答案

d从2开始,因为您最终会得到一个无限的1s列表作为Tom Karzes提到的因素。他对d求平方并检查它是否等于n的原因是,您只需要检查其因数的平方根即可,并且math.sqrt()在计算上比对数字进行平方运算更昂贵。它的作用是检查d是否是n的因数,直到d达到n的平方根。然后,他附加了d,因为已将其检查为一个因素。

您对代码还有其他不了解的地方吗?

07-26 09:34