我正在尝试编写最有效的代码以找到数字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}
答案 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))