📜  打印给定数字的所有质因数的高效程序(1)

📅  最后修改于: 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 个因数,所以效率非常高。对于一个非常大的数字,该算法也可以在很短的时间内计算出其所有质因数。