表达一个数字的素因子的方法

时间:2016-03-07 01:16:32

标签: python python-3.x primes symbolic-math prime-factoring

我的任务是返回整数(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?等等。

1 个答案:

答案 0 :(得分:3)

d从2开始,因为你最终会得到一个无限的1s列表作为Tom Karzes提及的因素。他将d平方并检查它是否等于n的原因是因为您只需要检查其因子的数字的平方根,math.sqrt()的计算成本高于d平方数字。它的作用是检查n我是d因子,直到n到达d的平方根。然后他追加{{1}},因为它已被检查为一个因素。

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