我的任务是返回整数(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?等等。
答案 0 :(得分:3)
d
从2开始,因为你最终会得到一个无限的1s列表作为Tom Karzes提及的因素。他将d
平方并检查它是否等于n
的原因是因为您只需要检查其因子的数字的平方根,math.sqrt()
的计算成本高于d
平方数字。它的作用是检查n
我是d
因子,直到n
到达d
的平方根。然后他追加{{1}},因为它已被检查为一个因素。
你还有什么不明白的代码吗?