数的质因数的表示方法

Way to express prime factors of a number

我的任务是return一个整数(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 开始,因为你最终会得到无限的 1 列表作为 Tom Karzes 提到的因素。他对 d 求平方并检查它是否等于 n 的原因是因为您只需要检查数字的平方根以获得它的因子,而 math.sqrt() 在计算上比平方作为数字。它所做的是检查 d 是否是 n 的因数,直到 d 达到 n 的平方根。然后他附加 d 因为它已被检查为一个因素。

代码还有什么不明白的吗?