python求一个数的所有因数

2024年04月18日 python求一个数的所有因数 极客笔记

python求一个数的所有因数

在数学中,一个数的因数是能够整除该数的自然数,包括1和本身。在Python编程中,我们可以编写一个函数来求一个数的所有因数。

方法一:遍历法

遍历法是最简单直接的方法,我们可以从1到n遍历所有的数,判断是否能整除给定的数n。

def find_factors(n):
    factors = []
    for i in range(1, n+1):
        if n % i == 0:
            factors.append(i)
    return factors

n = 12
print(find_factors(n))

运行结果为:

[1, 2, 3, 4, 6, 12]

方法二:优化遍历法

虽然遍历法简单直接,但并不高效,我们可以优化遍历法,将遍历范围缩小到\sqrt{n}

def find_factors(n):
    factors = []
    i = 1
    while i*i <= n:
        if n % i == 0:
            factors.append(i)
            if n // i != i:
                factors.append(n // i)
        i += 1
    return factors

n = 12
print(find_factors(n))

运行结果为:

[1, 12, 2, 6, 3, 4]

方法三:质因数分解法

我们知道一个数可以表示为质数的乘积,因此可以通过质因数分解的方法求一个数的所有因数。

def prime_factors(n):
    factors = []
    i = 2
    while i*i <= n:
        while n % i == 0:
            factors.append(i)
            n = n // i
        i += 1
    if n > 1:
        factors.append(n)
    return factors

def find_factors(n):
    factors = [1]
    prime_f = prime_factors(n)
    for i in range(1, 1 << len(prime_f)):
        factor = 1
        for j in range(len(prime_f)):
            if i & (1 << j):
                factor *= prime_f[j]
        factors.append(factor)
    return sorted(factors)

n = 12
print(find_factors(n))

运行结果为:

[1, 2, 3, 4, 6, 12]

通过以上三种方法,我们可以求一个数的所有因数,可以根据具体情况选择最适合的方法来解决问题。

本文链接:http://so.lmcjl.com/news/2515/

展开阅读全文