我的任务是返回整数(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
,因为已将其检查为一个因素。
您对代码还有其他不了解的地方吗?