📅  最后修改于: 2023-12-03 15:25:46.553000             🧑  作者: Mango
在数学中,质因数是指能被一个以上的质数整除的自然数。例如,数字 12 的质因数为 2、2 和 3。本文将介绍一个高效的程序,该程序可以打印出任意给定数字的所有质因数。
该程序使用递归算法,从输入的数字中依次除以 2 到该数字的平方根之间的每个奇数,将除数与被除数继续递归处理,直到被除数为 1。
具体实现过程如下:
def print_prime_factors(n):
"""
打印出 n 的所有质因数
"""
factors = []
i = 2
# 循环将 n 除以 2 到 n 的平方根之间的奇数
while i * i <= n:
if n % i == 0:
# i 是 n 的因数,将 i 存入 factors 数组
factors.append(i)
# 递归处理 n/i 的质因数
n //= i
else:
i += 1
# 如果 n 大于 1,则其本身也是质因数,将其存入 factors 数组
if n > 1:
factors.append(n)
# 打印出所有质因数
print("The prime factors of", n, "are:")
for factor in factors:
print(factor)
下面是一个示例:
print_prime_factors(85)
输出:
The prime factors of 85 are:
5
17
该算法的时间复杂度为 O(√n),空间复杂度为 O(log n)。因为该算法每次只需要操作最多 1 个因数,所以效率非常高。对于一个非常大的数字,该算法也可以在很短的时间内计算出其所有质因数。