我无法理解我在本网站上遇到的以下代码块。它创建了一个函数来找出给定数字的最大素数因子。它在下面给出:
def prime_factors(n):
"""Returns all the prime factors of a positive integer"""
factors = []
d = 2
while n > 1:
while n % d == 0:
factors.append(d)
n /= d
d = d + 1
return factors
pfs = prime_factors(1000)
largest_prime_factor = max(pfs) # The largest element in the prime
我怀疑函数prime_factors(n)
会返回n
的因子而不是素数因子,因为while循环只是检查d
是n
的因子,而不是它是否也应该是素数。
请指出我是否错了,以及你的逻辑背后的原因。此外,如果我是正确的,那么请简单地提供一个合适的代码块及其背后的逻辑。尽量保持代码尽可能简单。
答案 0 :(得分:2)
请注意,在内循环中,迭代时n
除以d
。
while n % d == 0:
factors.append(d)
n /= d
这意味着,在每次迭代之后,n
的新值不再可以被d
整除。
举一个例子,让我们说n = 3000
,它有一个不是素数的因子15
。但是,由于n
首先由d = 3
和d = 5
传递,因此当d
到达15
时,n
将是&3
#39; s不能被5
和15
整除,因此非素数因子n % d == 0
现在不会通过VALUES \([0-9]+,
。
答案 1 :(得分:2)
此功能正确,注意第二块时间。它将连续地将给定数字除以d
变量,当除法结果有余数时,它将离开此块并将d
递增1,然后它将再次运行。
考虑到这一点,这个函数会将数字除以2而不留下余数,然后它将移动到下一个不会留下余数的数字。最后,结果只包含素数。
它会是这样的:
def prime_factors(n):
factors = []
d=2
while n > 1:
while n % d == 0:
factors.append(d)
n /= d
d += 1
return factors
print(prime_factors(1000)) # will print [2, 2, 2, 5, 5, 5]