使用数学库查找所有除数

时间:2018-10-25 16:50:35

标签: python python-3.x

我正在尝试编写最有效的代码以找到数字N的因数:

这是我的代码:

def divisors(n):
    divs = set()
    for i in range(1, int(math.sqrt(n)) + 1):
        if N % i == 0:
            divs.add(i)
            divs.add(int(n/i))
    return divs

问题是当我放5时,如果2不是5的除数,它会给我{1, 2, 5}

2 个答案:

答案 0 :(得分:0)

使用列表理解:

def divisors(n):
    return [x for x in range(1, n+1) if n % x == 0]

print(divisors(5))

答案 1 :(得分:0)

使用列表理解的更多有效方式

def divisors(n):
    divs = [x for x in range(1, int(math.sqrt(n))+1) if n % x == 0]
    opps = [int(n/x) for x in divs] # get divisors > sqrt(n) by division instead
    return list(set(divs + opps))

对于更大的数字,这可以将复杂度从O(n)降低到O(n^(1/2))