Python中的细化因子

Python中的细化因子,python,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 &g

我必须编写一个函数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()
def系数(n):
i=n
lst=[]
当i>0时:
如果n%i==0:
一、附加(一)
i-=1
打印(lst)
结果=[如果i>2且i
您可以使用列表理解来查找数字的因子。此外,要优化您的解决方案,您只需运行到数字的一半

e、 g.对于12,12的最大系数可以是6

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

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

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

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

e、 g.对于12,12的最大系数可以是6

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

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

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

您的
factor
函数应该首先从最小的值开始查找,然后开始增加

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

您的
因子
函数应该首先从最小值开始查找,然后开始增加

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

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

print lst[-2]

也就是说,你真的不应该为这些烦恼。相反,从2开始,向上努力,寻找最小的因素。如果在没有找到任何因子的情况下得到sqrt(n),则返回-1的结果。

您在这里做了大量不必要的工作:您找到了所有因子,而不是最小的因子。但是,您确实有一个正确的答案:您将第二个元素打印为最低因子,但列表的顺序正好相反。试一试

print lst[-2]

也就是说,你真的不应该为这些烦恼。相反,从2开始,向上努力,寻找最小的因素。如果在没有找到任何值的情况下得到sqrt(n),则返回-1的结果。

以下是查找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)
def系数(n):
i=2
a=[]

当i*i时,这里是寻找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)
def系数(n):
i=2
a=[]

而我*我你没有在你的
因子(n)
中返回任何内容,欢迎来到StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。具体来说,您的程序目前做了什么,在哪里失败?您没有在
因子(n)
欢迎使用StackOverflow中返回任何内容。请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。具体来说,你的课程目前做了什么,在哪里失败了?请选择教学法。你应该以更好的方式添加提示。大约在你键入评论时,我这样做了。请改进教学方法。你应该用更好的方式添加一个提示。我这样做,大约是你输入评论的时间。