2

这是我现在拥有的代码。我无法让它返回问题的正确结果。

def problem(n):
    myList = [1,n]
    for i in range(1,n):
        result = int(n ** .5) 
        new = n/result 
        i = i + 1 
        myList.append(new) 
    return myList 
4

4 回答 4

2

您只需要从 1 迭代到 n ** 0.5 + 1,您的因子将全部是 i,并且您在此过程中会选择 n/i。

例如: 10 的因数:

我们只需要从 1 迭代到 4

i = 1 => 10 % 1 == 0,所以因子:i = 1, 10 / i = 10

i = 2 => 10 % 2 == 0,所以因数:i = 2, 10 / i = 5

i = 3 => 10 % 3 != 0,无因数

我们无需再多说,答案是 1、2、5、10。

def problem(n):
    myList = []
    for i in xrange(1, int(n ** 0.5 + 1)):
        if n % i == 0:
            if (i != n/i):
                myList.append(i)
                myList.append(n / i)
            else:
                myList.append(i)
    return myList 

结果:

>>> problem(10)
[1, 10, 2, 5]
>>> problem(12)
[1, 12, 2, 6, 3, 4]
>>> problem(77)
[1, 77, 7, 11]
>>> problem(4)
[1, 4, 2]
>>> problem(64)
[1, 64, 2, 32, 4, 16, 8]
>>> len(problem(10 ** 12))
169
于 2012-11-13T21:05:26.100 回答
2

的因数n是所有均分的数n。ifi的一个因素也是如此。nn % i == 0

您需要做的是对从 1 到 的每个数字执行此测试n,如果该条件为真,则将该数字添加到您的列表中。

如果您在开始编写此代码时遇到问题,请使用您尝试过的内容更新您的问题。

请注意,上述方法并不是查找因子的最有效方法,但在我看来,这只是一个初学者的练习,因此需要一种幼稚的方法。

于 2012-11-13T20:54:43.857 回答
2

您的代码存在一些问题。首先,您不需要增加i,因为您的for循环已经这样做了。其次,使用一些基本的数学原理,您只需要遍历一系列数字,直到您传入数字的平方根。我将把第二部分留给你玩和试验。

def problem(n):
    myList = []
    for i in range(1, n+1):
        if n % i == 0:
            myList.append(i)

    return myList

对于更高级的方法,您可以尝试非常强大但通常更适合较小数据集的列表推导。

def problem(n):
    return [x for x in range(1, n+1) if n % x == 0]
于 2012-11-13T20:57:16.283 回答
0

使用列表理解:

In [4]: num=120

In [5]: [x for x in range(2,int(num/2)+1) if num%x==0]
Out[5]: [2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 24, 30, 40, 60]

In [6]: num=121

In [7]: [x for x in range(2,int(num/2)+1) if num%x==0]
Out[7]: [11]
于 2012-11-13T20:51:51.357 回答