📅  最后修改于: 2023-12-03 15:21:26.176000             🧑  作者: Mango
在数学中,质因数是一个能够整除给定正整数的质数(素数)。例如,6的质因数为2和3,8的质因数为2,3的质因数为3。质因数分解是将一个正整数表示为一些质数(或幂的积)的乘积的过程。
我们可以通过进行质因数分解来找到一个数的所有质因数。具体实现过程如下:
下面是一个简单的 Python 实现:
def prime_factors(n):
factors = []
i = 2
while n > 1:
if n % i == 0:
factors.append(i)
n /= i
else:
i += 1
return factors
该实现使用了一个 while
循环,不断地找到能够整除原数的最小质因数,并将其加入到结果列表中。最终,函数返回结果列表。
下面是一个使用该函数的示例:
>>> prime_factors(12)
[2, 2, 3]
>>> prime_factors(35)
[5, 7]
>>> prime_factors(123)
[3, 41]
该函数的时间复杂度为 $O(\sqrt{n})$,其中 $n$ 是待分解的数。这是因为,最小质因数 $p$ 不可能大于 $\sqrt{n}$。每次找到一个质因数都会将 $n$ 除以该质因数,因此最多只需要执行 $\sqrt{n}$ 次循环。
当 $n$ 很大时,这个实现的速度会明显变慢。我们可以通过一些剪枝优化来加快速度,例如:
下面是使用以上优化后的代码实现:
def prime_factors(n):
factors = []
primes = set()
for i in range(2, int(n ** 0.5) + 1):
while n % i == 0:
if i not in primes:
primes.add(i)
factors.append(i)
n /= i
if n > 1:
factors.append(n)
return factors
该优化实现的时间复杂度仍为 $O(\sqrt{n})$,但是在 $n$ 很大时的速度会有明显提升。