Python中的细化因素

时间:2017-04-19 18:43:47

标签: python

我必须编写一个函数 factor ,它接受一个整数参数 n ,并返回从2到n-1的最小数字,它除以n。如果不存在这样的数字,则返回-1。

我能够创建函数来查找因子,但我不确定如何优化它以返回正确的结果。

def factors(n):
   i = n
   lst=[]
   while i > 0:
      if n % i == 0:
         lst.append(i)
      i -= 1
   print(lst)
   result=[i for i in lst if i > 2 and i < n-1]
   print(result[1])



def main():
   n=int(input("Enter n:"))

   factors(n)

main()

4 个答案:

答案 0 :(得分:3)

您可以使用列表推导来查找数字的因子。此外,要优化您的解决方案,您只需要运行一半的数字。

e.g。对于12,最大因子12可以是6.

大于该数字一半的数字不能成为其因素。因此,您不需要在n-1之前运行循环。

>>> [n for n in range(2, number/2+1) if number % n == 0]

在上面一行中,我们将从2 to (number/2 + 1)运行一个循环并检查该数字是否可以被n整除,然后将其添加到列表中。

答案 1 :(得分:1)

您的def factor(n): i = 2 while i < n: if n % i == 0: return i i += 1 return -1 >>> factor(6) 2 >>> factor(21) 3 >>> factor(49) 7 >>> factor(13) -1 函数应首先从最小值开始,然后开始增加

factors

然后def factors(n): values = [1] while n > 1: f = factor(n) if f > -1: values.append(f) n //= f else: values.append(n) break return values >>> factors(21) [1, 3, 7] 可以调用

    {
  "remoting": {
    "context": false,
    // etc.
  },
  // etc.
}

答案 2 :(得分:1)

你在这里做了很多不必要的工作:找到所有因素,而不是最小的因素。但是,您可以轻松获得正确答案:您将第二个元素打印为最低因子,但您的列表顺序相反。尝试

print lst[-2]

那说你真的不应该打扰所有这些。相反,从2开始向上工作,寻找最小的因素。如果在没有找到任何内容的情况下到达sqrt(n),则返回-1的结果。

答案 3 :(得分:0)

这是在2或n-1之间找到数字因子的优化方法:

def factor(n):
    i=2
    a=[]
    while i*i<=n:
        if n%i==0:
            if i!=n/i:
                a.append(i)
                a.append(n/i)
            else:
                a.append(i)
        i+=1
    a.sort()
    print a

n=int(input())
factor(n)