我必须编写一个函数 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()
答案 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)