数的质因数的表示方法
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
因为它已被检查为一个因素。
代码还有什么不明白的吗?
我的任务是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
因为它已被检查为一个因素。
代码还有什么不明白的吗?